numpy.core._exceptions.MemoryError: Unable to allocate 1.45 GiB for an array with shape (13935, 1393

报错

numpy.core._exceptions.MemoryError: Unable to allocate 1.45 GiB for an array with shape (13935, 13935) and data type float64

numpy.core._exceptions.MemoryError: Unable to allocate 11.7 GiB for an array with shape (39547, 39547) and data type float64

这里,1.45GiB 和 11.7GiB 分别代表什么呢?
在这里插入图片描述

原因

最主要的还是电脑内存不足,因为需要处理的数据量太大,GPU 性能不够,存在内存溢出现象

但实际上它保存的不是模型文件,而是参数文件文件。在模型文件中,存储完整的模型,而在状态文件中,仅存储参数。因此,collections.OrderedDict 只是模型的值。

解决方案

1.修改 float 精度

在代码中我使用的是flaot 64 类型。但是实际上未必需要这么大的精度,这时候可以使用 numpy 中的 float32, float16 等,这样可以降低很多的内存需求。

总之,根据自己的需求选,够用就好,单这个,就可以节省好几倍的内存。

X = np.array(Xc, dtype=np.float16)

源代码:

X = np.array(Xc)
2. python库、Pandas和Numpy库更新为64位

python 原始的数据类型是 32 位,但是最大只能使用 2G 内存,超过 2G 报错 MemoryError。

如果你的 Python 用的是 32 位的,那么你的 pandas 和 Numpy 也只能是 32 位的,那么当你的内存使用超过 2G 时,就会自动终止内存。而 64bit python 则无此限制,所以建议使用 64bit python。

解决方法就是:检查自己安装的 python 是多少位的,CMD 输入 python,如果是 32 位,那么就重装 64 位的 Python。

如果你的 python 本来安装的就是 64 位的,可以采用下面的方法!

3. 扩充虚拟内存

在运行代码的过程中发现,内存其实只用到了一半不到,但是为什么会出现Memory的错误呢?
进过百度发现说是内存被限制了,所以考虑采用扩大虚拟内存的方法。
扩大虚拟内存的方法:

  1. 打开 控制面板
  2. 点击 系统 这一项;
  3. 点击 高级系统设置 这一项;
  4. 点击 性能 模块的 设置 按钮;
  5. 选择高级面板,点击更改 虚拟内存 模块;
  6. 记得 不要选中“自动管理所有驱动器的分页文件大小”,然后选择一个驱动器,也就是一个盘,选中自定义大小,手动输入初始大小和最大值,但是不要太大!
  7. 都设置好之后,记得点击 “设置”, 然后再确定,否则无效,最后 重启电脑 就可以了。
5. 使用python的gc模块

python的垃圾回收机制比较懒惰,有时候在一个for循环中的变量用不完zo不会回收,下次重新初始化的时候,又重新开辟了空间,这时候可以手动del这个变量,然后手动import gc, 然后手动gc.collect()

6. 其它方法

可以从以下几个方面去改进:

0、换一个性能好的电脑,主要是硬件的问题

1、numpy 在定义数组的时候,采用更低的精度。从 float64 降低为 float32

array_ = np.zeros((10000,10000),dtype=‘float32’) # 默认 float64

2、修改pycharm的运行内存

Help->Find Action->(type "VM Options")->(Click)"Edit Custom VM Options"   打开pycharm64.exe.vmoptions进行编辑
修改-Xmx750m 为 -Xmx4096m     分配 4G 内存,视情况而定。保存并重启 pycharm。

在这里插入图片描述
我的电脑原始Xmx为 1536m
在这里插入图片描述

3、修改windows虚拟内存

————————————————

参考链接:https://blog.csdn.net/muye_IT/article/details/125067419
[1]

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值