为“ conv2d_2 /卷积”从1中减去3导致的负尺寸大小
keras
keras-layer
neural-network
python
6
0

在Keras中声明输入层时收到此错误消息。

ValueError:负尺寸大小是由于输入形状为[?,1,28,28],[3,3,28,32]的'conv2d_2 / convolution'(op:'Conv2D')从1中减去3引起的。

我的代码是这样的

model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))

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

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

默认情况下,Convolution2D( https://keras.io/layers/convolutional/ )期望输入采用“ channels-last”格式(样本,行,列,通道)。您的数据似乎采用了格式(样本,通道,行,列)。在声明Convolution2D层时,您应该能够使用可选关键字data_format = 'channels_first'来解决此问题。

model.add(Convolution2D(32, (3, 3), activation='relu', input_shape=(1,28,28), data_format='channels_first'))
收藏
评论

Keras具有以下后端兼容性:

TensorFlow:由Google,Theano编写:由LISA实验室,CNTK开发:由Microsoft

每当您看到[?,X,X,X],[X,Y,Z,X]出现错误时,就会出现一个频道问题,以解决此Keras使用自动模式的问题:

进口

from keras import backend as K
K.set_image_dim_ordering('th')

“ tf”格式表示卷积核将具有以下形状(行,列,输入深度,深度)

这将始终有效...

收藏
评论

我有同样的问题,但是此线程中提供的解决方案对我没有帮助。就我而言,是导致此错误的另一个问题:


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())

错误

图像大小为32 x32。在第一个卷积层之后,我们将其缩小为30 x30。(如果我正确理解了卷积)

然后池化层将其除,因此15除以15 ...

我希望您能看到它的去向 :最终,我的要素地图太小,以至于我的池化层(或卷积层)太大而无法遍历它 -从而导致错误


解决此错误的简单方法是增大图像大小或使用较少的卷积层或池化层。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号