0

我有一行代码会产生相当大的内存消耗。

这是行:

X_train = (np.array(a).reshape(1000,100) for a in X_train)

简而言之,我正在重塑数据集的每一行。问题是,这会产生一个内存错误,导致我的内核在本地和 AWS 上崩溃。

如何使用 xrange 函数重写该行以减少内存使用?

(或任何其他会减少内存使用的方式)

谢谢!!!

4

1 回答 1

1

正如@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))。

于 2017-07-06T22:04:29.200 回答