2

我有一个学习人工神经网络的程序,它需要一个二维 numpy 数组作为训练数据。我要使用的数据数组的大小约为 300,000 x 400 浮点数。我不能在这里使用分块,因为我正在使用的库 (DeepLearningTutorials) 将单个 numpy 数组作为训练数据。

当此进程的 RAM 使用量约为 1.6Gb 时,代码显示 MemoryError(我在系统监视器中检查了它),但我的总 RAM 为 8GB。此外,该系统是 Ubuntu-12.04 32 位。

我检查了或其他类似问题的答案,但在某处它说没有什么比为你的 python 程序分配内存和某处关于如何增加进程内存的答案不清楚。

一件有趣的事情是我在另一台机器上运行相同的代码,它可以毫无问题地采用几乎 1,500,000 x 400 浮点数的 numpy 数组。基本配置类似,只是另一台机器是 64 位的,而这台机器是 32 位的。

有人可以给出一些理论上的答案,说明为什么会有这么大的差异,或者这是我的问题的唯一原因吗?

4

1 回答 1

2

32 位操作系统最多只能处理 4gb 的内存,而 64 位操作系统可以利用更多的内存(理论上 1680 万兆兆字节)。由于您的操作系统是 32 位的,因此您的操作系统只能利用 4gb,因此不使用其他 4gb。

另一台 64 位机器没有 4gb 内存限制,因此它可以利用所有已安装的内存。

这些限制来自这样一个事实,即 32 位机器只能存储 32 字节的内存地址(指针),因此计算机可以识别 2^32 个不同的可能内存位置。类似地,64 位机器可以识别 2^64 个不同的可能内存位置,因此它可以寻址 2^64 个不同的字节。

于 2013-07-19T23:04:53.663 回答