背景:跑一个lenet模型,数据集没选用keras自带的手写数字图像,而是选择(224,224,3)维的较大像素图像。
报错:ResourceExhaustedError: OOM when allocating tensor with shape[200704,1024]
Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.
平时遇到这个问题(Hint: If you want to see a list of allocated tensors when OOM happens),因为显存不存,直接减小batch_size即可。
但今天同样遇到这个问题,当令batch_size=1时,依然报错。
根据报错位置,定位到第一个全连接层的位置(x = Dense(1024,activation='relu')),
我们先计算一下这一层所需的参数的大小,当batch_size=1,参数为(200704, 1024),因为图像像素是float32位的,即每股像素相当于四个字节(4B=32bit)的存储量, 1*200704*1024*4B=822083584B/1024/1024=784M,这一层就占这么多存储量,所以内存明显不足。
修改办法:1 换显存,增大内存。
2 除此之外,可以适当减少层的的单元数,如将Dense(1024)降低为Dense(512),前提不能保证训练效果。
3 适当增加模型的深度
参考文章:https://blog.csdn.net/qq_35860352/article/details/80425739