我有一个学习人工神经网络的程序,它需要一个2维的numpy数组作为训练数据。我想要使用的数据数组大小约为300,000 x 400浮点数。我不能在这里使用分块,因为我使用的库(DeepLearningTutorials)将一个numpy数组作为训练数据。
当此过程的RAM使用率约为1.6Gb时,代码显示MemoryError(我在系统监视器中检查过),但我的总RAM为8GB。此外,系统是32位的Ubuntu-12.04。
我检查了其他类似问题的答案,但在某处它表示没有什么比分配内存到你的python程序那样的答案并不清楚如何增加进程内存。
一个有趣的事情是我在不同的机器上运行相同的代码,它可以采用几乎1,500,000 x 400浮动的numpy数组而没有任何问题。基本配置类似,只是另一台机器是64位,而这一台机器是32位。
有人可以给出一些理论上的答案,说明为什么会有这么大的不同,或者这是我遇到问题的唯一原因?
答案 0 :(得分:2)
32位操作系统只能处理高达4GB的内存,而64位操作系统可以利用更多内存(理论上为1680万兆兆字节)。由于您的操作系统是32位操作系统,因此您的操作系统只能使用4gb,因此不会使用其他4gb。
另一台64位计算机没有4gb ram限制,因此它可以利用其所有已安装的RAM。
这些限制来自于32位机器只能存储32字节的存储器地址(指针)这一事实,因此计算机可以识别出2 ^ 32种不同的可能存储位置。类似地,64位机器可以识别2 ^ 64个不同的可能内存位置,因此它可以处理2 ^ 64个不同的字节。