python - Python:谷歌计算引擎上的内存错误
问题描述
在谷歌计算引擎上,我运行以下命令:
z = np.zeros((10000, 32, 32, 3))
并得到
----> 1 z = np.zeros((10000, 32, 32, 3)) 中的 MemoryError Traceback (最近一次调用最后一次)
MemoryError: Unable to allocate 234. MiB 用于形状为 (10000, 32, 32, 3) 且数据类型为 float64 的数组
这看起来像当前的操作系统配置阻止我分配大数据块,这对我来说似乎很奇怪。
如何获得需要分配的内存?
这是针对cs231n 的任务 2,用于将 CIFAR-10 加载到内存中。
解决方案
我的猜测是您尝试创建的数组对于谷歌计算机引擎来说可能太大了。这样想:
您正在尝试为 10000*32*32*3=30,720,000 个单元格大小的 4d 数组分配内存,这很多!考虑到 python 中 flaot64 的标准大小为 8,即使用单个命令分配 245,760,000 字节(245MB)的数据!
您可以使用以下命令分配具有相似大小的字节数组:
z = bytearray(245760000)
但我不完全知道你用这个做什么,所以我不知道这是否会对你有帮助。
即使有解决方案可以在 google 计算机引擎上分配这么多内存,我还是敦促您考虑是否真的需要那么多空间。例如,如果您仍然需要这么大的数组,但每个单元格的值是 0 或 1,则可以将其设为二进制数组,其空间将减少 64 倍。
同样,重新考虑您是否真的需要那么多空间,以及是否确实需要那么大的数组,而不是更有创意地存储所有数据。
推荐阅读
- ffmpeg - ffmpeg - 连接 N 个命令
- java - 一段代码的后置条件
- java - 正则表达式,在Java中获取“+”和行尾之间的文本
- python - 无法使用 imread() 加载图像
- react-native - 访问登录功能时跳过 SecureStore 并返回功能错误
- java - 如何使用特定行的 BufferedReader 从 Textfile 分配值?
- server - 如何将负载均衡器用于单片服务器
- css - 有没有办法定位 InnerHTML 使其位于普通 html 中的某些内容之下
- linux - linux内核如何知道在系统调用中作为参数传递的地址无效?
- git - Git重新标记理智和疯狂的建议