Python +不断增加的内存分配

时间:2015-10-12 12:50:49

标签: python numpy memory-leaks out-of-memory

我正在编写一个模块来训练大型数据集上的ML模型 - 它包含0.6M数据点,每个数据点为0.15M。我在加载数据集本身时遇到问题。 (它的所有numpy数组)

下面是一段代码片段(这复制了实际代码的主要行为):

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.我已经明确地变量= None,再也没用了。

2 个答案:

答案 0 :(得分:1)

正如评论中所指出的,这里的数据量非常大,即使您设法加载训练集,神经网络也可能很难。对您而言,最好的选择可能是研究数据点的一些降维方法。像主成分分析这样的东西可以帮助将150K尺寸降低到更合理的数量。

答案 1 :(得分:-1)

这就是我为类似问题所做的。我应该在覆盖时再次创建空列表。

#initialize

X_List = [] 
Y_List = []


//do something with the list

现在,如果您不需要旧值,只需再次创建列表

X_List = [] 
Y_List = []

但我不知道你的情况是否需要或可能。也许它是最惯用的方式,但它有效。