在做图像分类,上千类图像,训练神经网络的时候,程序报错 data = np.array(data, dtype="float") / 255.0 MemoryError (补充:本人已经测试,在选用比较少类别图像的时候,该代码是可以成功运行并能生成训练出的模型文件,但是扩展到上千类之后就报 MemoryError,之前网上搜了相关的错误,有的说是数据增强的原因,可是取消在线数据增强之后,仍然报这个错误,百思不得其解,望能得到高手大佬们的指点帮助,在此小生先谢谢了!

在做图像分类,上千类图像,训练神经网络的时候,程序报错 data = np.array(data, dtype="float") / 255.0 MemoryError (补充:本人已经测试,在选用比较少类别图像的时候,该代码是可以成功运行并能生成训练出的模型文件,但是扩展到上千类之后就报 MemoryError,之前网上搜了相关的错误,有的说是数据增强的原因,可是取消在线数据增强之后,仍然报这个错误,百思不得其解,望能得到高手大佬们的指点帮助,在此小生先谢谢了!
1 malusama Dec 14, 2019 上 64 位 或者手动 gc |
2 suifengingo OP @malusama 我用的是 64 位的机器,内存 32G...不知您所说的手动 gc 是什么意思呢 |
3 chempotato Dec 14, 2019 via Android gc 内存回收啊 |
4 lspvic Dec 14, 2019 via Android 减小 batch_size |
7 helloworld000 Dec 14, 2019 1. 减少 batch size 2. quantlization (最简单的,把 tensor 默认的为 float64,改成 float16 ) 3. 上 cluster |
8 mayfly233 Dec 15, 2019 减少 batch size 再做 batch accumulation 呗,不就一样了 或者就用 apex fp16,立竿见影,不过看框架兼容 |
9 lonelygo Dec 15, 2019 几张卡?加起来都多大内存? 减小 batch_size,从 2 开始吧,要是=2 都不行,只能考虑上 cluster 了。 还有就是降到半精度试试看 或者,把主干网换一个不太深的。 |
10 suifengingo OP 谢谢大佬们的热心解答,我再去按照大佬们说的试试看 |
11 laminux29 Dec 15, 2019 用 SSD 做虚拟内存。 |
12 tfdetang Dec 15, 2019 你这句报错是在 input 输入的时候就报错了? 所以数据生成部分是怎么写的? 可以试试 tf.data |
13 dick20cm Dec 15, 2019 via Android 兄弟,别搞这个了,你不适合,真心劝退 |
14 rpman Dec 15, 2019 via iPhone 内存不够吧。 |
15 suifengingo OP @mayfly233 请问下如何加入 batch accumulation ?虚心求教 |
16 mayfly233 Dec 15, 2019 第一个 batch 计算完别更新梯度,算完第二个 batch 再合并起来更新梯度,不就相当于累积 batch size x 2 了 |