我在Keras中声明输入层时收到了此错误消息。
ValueError:“conv2d_2/convolution”的1减3导致的负维度大小(运算符:“Conv 2D”)与输入形状:[?、1、28、28]、[3、3、28、32]等。
我的代码是这样的
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))
示例应用程序:https://github.com/IntellijSys/tensorflow/blob/master/Keras.ipynb
6条答案
按热度按时间y53ybaqx1#
默认情况下,Convolution 2D(https://keras.io/layers/convolutional/)要求输入的格式为(样本、行、列、通道),即“channels-last”。您的数据似乎为(样本、通道、行、列)。您应该可以在声明Convolution 2D层时使用可选关键字
data_format = 'channels_first'
来修复此问题。1sbrub3j2#
我遇到了同样的问题,但是这个线程中提供的解决方案没有帮助我。在我的情况下,是另一个问题导致了这个错误:
编号
错误
图像大小为32 x 32。在第一个卷积层之后,我们将其缩小为30 x 30。(如果我对卷积的理解正确的话)
然后池化层将其分割,即15乘以15。
然后另一个卷积层将其缩减为13乘13...
我希望你能明白这是怎么回事:最后,我的要素Map太小,以至于我的池化图层(或卷积图层)太大而无法覆盖它-这就导致了错误
溶液
此错误的简单解决方案是增大图像大小或使用较少的卷积或池化层。
gkn4icbw3#
Keras具有以下后端兼容性:
tensorflow :通过谷歌,Theano:由丽莎实验室开发,CNTK:微软公司
每当您看到[?,X,X,X]、[X,Y,Z,X]错误时,这是一个通道问题,需要使用Keras的自动模式进行修复:
汇入
“tf”格式意味着卷积核将具有以下形状(行、列、输入深度、深度)
这将永远有效...
ghhkc1vu4#
您可以改为保留卷的空间维度,以便输出卷大小与输入卷大小匹配,方法是将值设置为“same”。use padding='same'
gblwokeq5#
请使用以下选项:
根据您的喜好,您可以使用
'channels_first'
或'channels_last'
来设定影像数据格式。(Source)如果这样做不起作用,并且您的图像尺寸很小,请尝试缩小CNN的架构,就像前面的海报所提到的那样。
希望能有所帮助!
vpfxa7rd6#
我希望这会有帮助:)
请参阅代码:Fashion_Mnist_Using_LeNet_CNN