我正在编写一个模块来训练大型数据集上的ML模型 - 它包含0.6M数据点,每个数据点均为0.15M维度。我面临加载数据集本身的问题。 (所有numpy的阵列)Python +不断增加的内存分配
下面的代码片段(此复制的实际代码的主要行为):
import numpy
import psutil
FV_length = 150000
X_List = []
Y_List = []
for i in range(0,600000):
feature_vector = numpy.zeros((FV_length),dtype=numpy.int)
# using db data, mark the features to activated
class_label = 0
X_List.append(feature_vector)
Y_List.append(class_label)
if (i%100 == 0):
print(i)
print("Virtual mem %s" %(psutil.virtual_memory().percent))
print("CPU usage %s" %psutil.cpu_percent())
X_Data = np.asarray(X_List)
Y_Data = np.asarray(Y_List)
的代码会导致不断增加的内存分配,直到它被杀死。有没有办法减少不断增加的内存分配?
我已经尝试过使用gc.collect(),但它总是返回0.我已经使变量=无显式,不再使用。
你期望什么行为?每当您绕过循环并将其存储在列表中时,都会创建一个长度为FV_length的新向量。这将导致增加内存分配。在循环结束时,您期望的内存总量分配是多少? – Conor
@Conor:我使用PyBrain来训练一个神经网络。我的特征向量是0.15米的尺寸。我知道我正在创建新的矢量并将它们添加到迭代列表中,因此增加了内存分配。我在AWS 8GB机器上运行此代码。我想了解是否有更好的方法来编写此代码? –
您正试图在存储器中同时存储900亿英镑。显然,这不适合8GB的内存。我不知道你期望的答案是什么,因为我们对你的要求一无所知。 – interjay