'conv2d_2/convolution'从1减去3导致的负尺寸大小

Moh*_*din 14 python neural-network keras tensorflow keras-layer

在Keras中声明输入层时出现此错误消息.

ValueError:通过输入形状为'conv2d_2/convolution'(op:'Conv2D')从1中减去3得到的负尺寸大小:[?,1,28,28],[3,3,28,32].

我的代码是这样的

model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))
Run Code Online (Sandbox Code Playgroud)

示例应用程序:https://github.com/IntellijSys/tensorflow/blob/master/Keras.ipynb

ml4*_*294 31

默认情况下,Convolution2D(https://keras.io/layers/convolutional/)期望输入采用格式(样本,行,列,通道),即"通道最后".您的数据似乎采用格式(样本,通道,行,列).data_format = 'channels_first'在声明Convolution2D层时,您应该能够使用optional关键字修复此问题.

model.add(Convolution2D(32, (3, 3), activation='relu', input_shape=(1,28,28), data_format='channels_first'))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,它可以在〜/ .keras/keras.json中全局设置:"image_data_format":"channels_first" (4认同)

cha*_*l-f 22

我有同样的问题,这个线程中提供的解决方案对我没有帮助.经过深思熟虑后,我找到了解决方案,解决了我的问题.

首先,这是我的代码(我知道它不好,我还在学习)

imageSize=32
classifier=Sequential() 

classifier.add(Conv2D(64, (3, 3), input_shape = (imageSize, imageSize, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(64, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(64, (3, 3), activation = 'relu')) 
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(64, (3, 3), activation = 'relu')) 
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(64, (3, 3), activation = 'relu')) 
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())
Run Code Online (Sandbox Code Playgroud)

只有经历了各种可能性后,才发现错误:

图像大小是32乘32.在第一个卷积层之后,我们将它减少到30乘以30(我认为,如果我正确理解卷积)

然后汇集层将它减少到一半,所以15乘15 ...

等等..最后,我的功能图很小,我的池层(或卷积层)太大而无法覆盖它 - 并导致错误

因此,通过使图像尺寸更大或减少卷积或合并层来容易地解决误差.

  • 这个非常重要!我当时的情况也一样。 (3认同)

Ree*_*ves 5

Keras 具有以下后端兼容性:

TensorFlow:谷歌,Theano:LISA 实验室开发,CNTK:微软

每当您看到 [?,X,X,X], [X,Y,Z,X] 的错误时,这是​​修复 Keras 使用自动模式的通道问题:

进口

from keras import backend as K
K.set_image_dim_ordering('th')
Run Code Online (Sandbox Code Playgroud)

“tf”格式意味着卷积核将具有形状(行、列、输入深度、深度)

这将始终有效...