[英]Python Memory Error with Python pkl files
我正在使用python庫進行深度學習和神經網絡。 我運行的計算機具有16 gb的ram @ 1866 MHz。 起初,我的輸入數據文件太大,所以我把它縮小了:
-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
,我不知道如何進一步分解。 它是theano張量變量,表示30,000x30,000浮點數矩陣。 我的問題:
首先,pkl不能很好地保存二進制數據,並且對內存不友好。 在寫入磁盤之前,它必須復制ram中的所有數據。 因此,這將使內存使用量翻倍! 您可以使用numpy.save和numpy.load來存儲ndarray而不會使內存增加一倍。
對於Theano變量,我想您正在使用Theano共享變量。 默認情況下,當您通過get_value()
獲得它時,它將復制數據。 您可以使用get_value(borrow=True)
來不復制它。
這兩個更改一起可以將內存使用量降低3倍。 如果這還不夠,或者您厭倦了自己處理多個文件,我建議您使用pytables: http ://www.pytables.org/它允許將一個大ndarray存儲在比ram大的文件中可用,但是它提供了一個與ndarray類似的對象,您可以像對ndarray一樣進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.