出现此错误时,我正在尝试使用一些512x512图像执行VGG16的一个小变化:
tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor with shape[131072,4096]
这是我的model.summary()
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 512, 512, 64) 1792
_________________________________________________________________
conv2d_1 (Conv2D) (None, 512, 512, 64) 36928
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 256, 256, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 256, 256, 128) 73856
_________________________________________________________________
conv2d_3 (Conv2D) (None, 256, 256, 128) 147584
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 128, 128, 128) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 128, 128, 256) 295168
_________________________________________________________________
conv2d_5 (Conv2D) (None, 128, 128, 256) 590080
_________________________________________________________________
conv2d_6 (Conv2D) (None, 128, 128, 256) 590080
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 64, 64, 256) 0
_________________________________________________________________
conv2d_7 (Conv2D) (None, 64, 64, 512) 1180160
_________________________________________________________________
conv2d_8 (Conv2D) (None, 64, 64, 512) 2359808
_________________________________________________________________
conv2d_9 (Conv2D) (None, 64, 64, 32) 147488
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 32, 32, 32) 0
_________________________________________________________________
flatten (Flatten) (None, 32768) 0
_________________________________________________________________
dense (Dense) (None, 4096) 134221824
_________________________________________________________________
dense_1 (Dense) (None, 4096) 16781312
_________________________________________________________________
dense_2 (Dense) (None, 3) 12291
=================================================================
Total params: 156,438,371
Trainable params: 156,438,371
Non-trainable params: 0
奇怪的是错误消息中的shape[131072, 4096]
。
在我的模型中,正如我们在model.summary()
中看到的那样,唯一的4096
在Dense
层之后的flatten
层的末尾。但是平坦层产生32768
个神经元的输出。因此,这种情况下的错误应为shape[32768, 4096]
。我尝试写2048或1024而不是4096。但是错误始终是shape[131072, 4096]
,并且这种形状永远不会改变。
问题是:
shape[131072, 4096]
来自哪里?不是shape[32768, 4096]
吗?我读了一些同样问题的问题,例如我们:
或
Error: OOM when allocating tensor with shape
但是他们都没有解释为什么形状不正确。
答案 0 :(得分:1)
由于使用的是VGG16,因此需要确保输入的内容为224x224,而事实并非如此。另外,您能否告诉您正在使用的批处理大小,这是因为您没有足够的GPU内存。因此,请考虑减小批次大小。假设您使用的是512x512,GPU没有足够的内存是可以理解的。另外,作为最佳做法,请记住,大多数SOTA模型的输入图像都不要超过300x300。建议不要使用这么大的尺寸。
关于您要求的形状,让我问您是否使用批处理大小32。因为32 x 256 x 256 x 64 = 131072 x4096。因此,张量实际上是正在创建的初始张量,但是由于内存不足而无法创建。至于为什么这样的形状可能是由于TensorFlow的内部工作而引起的,我对此不予评论,因为我对此感到有限,对此我深表歉意。但是,希望我能帮助您了解形状的来源。