我正在使用python库进行深度学习和神经网络。我正在运行的计算机有16 gb的1866年拉姆兆赫。一开始我的输入数据文件太大,所以我把它弄小了:
-rw-rw-r-- 1 jt jt 1.8G Mar 20 18:09 covarFile.pkl
原因:
Traceback (most recent call last):
File "PYJT2/pp_dbn.py", line 69, in <module>
go()
File "PYJT2/pp_dbn.py", line 32, in go
model = cPickle.load(open(CONTROL_DBN.INPUT, "rb"))
MemoryError
因为这个文件只是一个numpy数组的numpy数组,所以我可以将它分解成单独的文件,并通过加载大量pickle文件在程序中动态地重新创建更大的文件。在
total 5.2G
drwxrwxr-x 2 jt jt 4.0K Mar 20 18:15 ./
drwxrwxr-x 4 jt jt 4.0K Mar 20 18:15 ../
-rw-rw-r-- 1 jt jt 351M Mar 20 18:09 outfile-0.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-10.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-11.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:12 outfile-12.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:12 outfile-13.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:12 outfile-14.pkl
-rw-rw-r-- 1 jt jt 2.3M Mar 20 18:12 outfile-15.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:09 outfile-1.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:09 outfile-2.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-3.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-4.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-5.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-6.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-7.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-8.pkl
-rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-9.pkl
这个解决方案效果很好。我的问题是现在我有一个不规则的文件,它导致了一个MemoryError
,我不知道如何进一步分解。它是一个表示30000x30000浮点数矩阵的ano张量变量。我的问题:
首先,pkl不能很好地保存二进制数据,而且对内存不友好。在写入磁盘之前,它必须复制ram中的所有数据。所以这是内存使用量的两倍!你可以用numpy.保存以及负荷在没有内存倍增的情况下存储ndarray。在
对于Theano变量,我猜您使用的是Theano共享变量。默认情况下,当您通过
get_value()
获取它时,它会复制数据。您可以使用get_value(borrow=True)
来不复制此内容。在这两种改变加在一起可以将内存使用量降低3倍。如果这还不够,或者如果你已经厌倦了自己处理多个文件,我建议你使用pytables:http://www.pytables.org/它允许将一个大的数据存储在一个比可用内存更大的文件中,但是它提供了一个类似于ndarray的对象,您可以非常类似于ndarray来操作它。在
相关问题 更多 >
编程相关推荐