深度学习解决Unable to allocate 33.6 GiB for an array with shape (60000, 224, 224, 3) and data type float32

解决深度学习中内存不足的问题
在进行深度学习时遇到34G数组无法读取的问题,通过增加Win10系统虚拟内存至66G,成功读取并占用36G虚拟内存。建议配置:C盘剩余200G,内存16G,显存4G以上,以应对多系统、多环境和多软件需求。

深度学习时,常常要处理超大文件。因此,常常引起电脑故障。当电脑的内存16G,虚拟内存16G,读入34G的数组,发生错误:Unable to allocate 33.6 GiB for an array with shape (60000, 224, 224, 3) and data type float32。解决办法:

在win10设置-查找-高级设置-性能选项-虚拟内存-选自定义大小-按C盘剩余空间选择尽可能大的分页文件上限。本机300GC盘剩余容量170G,先将虚拟内存从16G扩大到36G没有成功,再扩大到66G。

 重启系统后,经较长时间运算终于成功读入大型数组了。读毕,占用虚拟内存36G。

 总结,机器学习+深度学习要求:c盘容量至少要有200G,内存16G,显存4G以上。不然,容纳多系统(如Windows+Linux)、多环境(如Conda+Tensorflow)、多软件及其不同版本(如Python+R)后,再有足够虚拟内存进行运算。

`MemoryError: Unable to allocate 8.51 GiB for an array with shape (11418726, 100) and data type float64` 错误表明程序在尝试分配 8.51GB 的内存来创建一个形状为 `(11418726, 100)` 且数据类型为 `float64` 的数组时,系统无法提供足够的内存。以下是一些解决该问题的方法: #### 减少数据规模 - **采样数据**:如果数据集非常大,可以对数据进行随机采样,只使用部分数据进行分析和处理。例如,在 Python 中使用 `numpy` 进行随机采样: ```python import numpy as np # 假设 data 是原始数据数组 data = np.random.rand(11418726, 100) sample_size = 100000 indices = np.random.choice(data.shape[0], sample_size, replace=False) sampled_data = data[indices] ``` - **分块处理**:将大规模数据分成较小的块,每次只处理一个块。例如,在处理大型文件时逐行读取和处理: ```python import numpy as np chunk_size = 1000 for i in range(0, 11418726, chunk_size): chunk = data[i:i+chunk_size] # 对 chunk 进行处理 result = np.sum(chunk, axis=0) ``` #### 降低数据精度 - **使用低精度数据类型**:`float64` 每个元素占用 8 个字节,可以考虑使用 `float32` 或更低精度的数据类型,这样可以将内存使用量减少一半。 ```python import numpy as np # 将数据类型从 float64 转换为 float32 data = data.astype(np.float32) ``` #### 释放不必要的内存 - **及时删除不再使用的变量**:在 Python 中,使用 `del` 关键字删除不再使用的变量,并调用 `gc.collect()` 来强制进行垃圾回收。 ```python import numpy as np import gc # 创建一个大数组 data = np.random.rand(11418726, 100) # 使用 data 进行一些操作 # 删除不再使用的变量 del data # 强制进行垃圾回收 gc.collect() ``` #### 增加系统内存 - **物理内存扩展**:如果可能的话,升级计算机的物理内存。 - **使用虚拟内存**:在某些操作系统中,可以增加虚拟内存(如 Windows 中的虚拟内存设置或 Linux 中的交换空间)。 #### 使用分布式计算 - **使用分布式计算框架**:如 Dask、Spark 等,这些框架可以将数据和计算任务分布到多个计算节点上,从而处理大规模数据。例如,使用 Dask 来处理大型数组: ```python import dask.array as da # 创建一个 Dask 数组 data = da.random.rand(11418726, 100, chunks=(1000, 100)) result = data.sum(axis=0).compute() ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值