Python+不断增加的内存分配

2024-05-01 21:51:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个模块来训练一个大型数据集上的ML模型——它包括0.6米的数据点,每个数据点的维度都是0.15米。我在加载数据集本身时遇到了问题。(全是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.收集()但它始终返回0。我把variables=None显式地设置为,不再有用。在


Tags: 数据代码importnumpylengthlabelfeaturelist
2条回答

这就是我对类似问题所做的。我总是在需要重写空列表时再次创建它。在

#initialize

X_List = [] 
Y_List = []


//do something with the list

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

^{pr2}$

但我不知道这对你来说是必要的还是可能的。也许这是最惯用的方法,但它奏效了。在

正如评论中所提到的,这里的数据量非常大,即使你成功地加载了训练集,神经网络也可能会很难工作。对您来说,最好的选择可能是在数据点上寻找一些降维方法。类似主成分分析的方法可以帮助将150K维降到一个更合理的数字。在

相关问题 更多 >