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)
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 ...
等等..最后,我的功能图很小,我的池层(或卷积层)太大而无法覆盖它 - 并导致错误
因此,通过使图像尺寸更大或减少卷积或合并层来容易地解决误差.
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”格式意味着卷积核将具有形状(行、列、输入深度、深度)
这将始终有效...
| 归档时间: |
|
| 查看次数: |
25667 次 |
| 最近记录: |