2013-07-19 91 views
2

我有一個學習人工神經網絡的程序,它需要一個二維numpy陣列作爲訓練數據。我想要使​​用的數據數組大小約爲300,000 x 400浮點數。我不能在這裏使用分塊,因爲我正在使用的庫(DeepLearningTutorials)將一個numpy數組作爲訓練數據。僅使用1.6 GB RAM的Python進程Ubuntu 32位Numpy陣列

當這個過程(我在系統監視器中檢查到)RAM的使用量大約爲1.6Gb時,代碼顯示MemoryError,但是我的總RAM爲8GB。此外,該系統是Ubuntu-12.04 32位。

我檢查了其他類似問題的答案,但在某處它說沒有什麼比如將內存分配給你的python程序,而某些地方的答案並不清楚如何增加進程內存。

一個有趣的事情是我在不同的機器上運行相同的代碼,它可以採取幾乎1,500,000 x 400浮點數的numpy數組沒有任何問題。除了另一臺機器是64位,這個是32位的,基本的配置是相似的。

有人請給出一些理論上的答案,爲什麼有這麼多的差異,或者這是我的問題的唯一原因?

回答

2

32位操作系統只能處理高達4GB的ram,而64位操作系統可以利用更多內存(理論上爲1680萬TB)。由於您的操作系統是32位的,因此您的操作系統只能使用4GB,因此您的其他4GB不能使用。

其他64位機器沒有4gb ram限制,所以它可以利用其安裝的所有ram。

這些限制來自於32位機器只能存儲32字節的內存地址(指針)的事實,因此計算機可以識別2^32個不同的可能內存位置。類似地,64位機器可以識別2^64個不同的可能存儲器位置,因此它可以尋址2^64個不同的字節。

+0

在32位上,Windows和Linux都不會給4GB任何進程,2/3GB更像。在SO上查看其他問題,瞭解確切的數字和技巧,將其推到最大。 4GB是機器總地址空間的大小。另請參閱[PAE](http://en.wikipedia.org/wiki/Physical_Address_Extension)。 IMO 2 GB /進程是最大的問題(或缺乏PAE的內核/硬件支持) – fvu

+0

我同意。我只是說4GB是理論上的限制... – jh314