我有一行代码会产生相当大的内存消耗。
这是行:
X_train = (np.array(a).reshape(1000,100) for a in X_train)
简而言之,我正在重塑数据集的每一行。问题是,这会产生一个内存错误,导致我的内核在本地和 AWS 上崩溃。
如何使用 xrange 函数重写该行以减少内存使用?
(或任何其他会减少内存使用的方式)
谢谢!!!
我有一行代码会产生相当大的内存消耗。
这是行:
X_train = (np.array(a).reshape(1000,100) for a in X_train)
简而言之,我正在重塑数据集的每一行。问题是,这会产生一个内存错误,导致我的内核在本地和 AWS 上崩溃。
如何使用 xrange 函数重写该行以减少内存使用?
(或任何其他会减少内存使用的方式)
谢谢!!!
正如@ali_m 所提到的,该行本身就是一个生成器表达式。这意味着在X_train
评估生成器表达式的元素之前,不会评估 的任何元素。您必须X_train
在代码中稍后的某个位置评估 的所有元素并将它们存储在内存中,可能通过list(X_train)
将每个元素附加X_train
到列表或类似的方式。这将在生成器表达式之前创建一个长度与原始长度相等的列表X_train
,因此如果它太大会导致内存错误。
X_train
在生成器表达式仍在评估时,无法对原始内容进行垃圾收集,因此通过创建 new 列表X_train
,您将创建两个巨大的列表,这可能是它耗尽内存的原因。
在这种情况下,您不能使用它xrange
来使您的代码更高效,因为它已经是一个生成器表达式。最好的办法是查看X_train
稍后在代码中的使用方式,并尝试对其进行迭代 ( for _ in X_train
),而不是尽可能将其放入列表 ( list(X_train)
)。