输入形状为[?,40,1,8]

时间:2019-01-04 06:13:24

标签: python keras

我正在做一个机器学习项目,其中涉及通过卷积神经网络对狗进行分类。我正在通过预先学习的Xception神经网络的迁移学习在Keras中构建自己的神经网络。在创建神经网络的过程中,我遇到了此错误:

  

从1减去2导致的负尺寸   输入形状为'max_pooling2d_2 / MaxPool'(op:'MaxPool'):   [?,1,1,40]。

这是我用来加载数据集和训练模型的代码。请注意:我没有访问Xception神经网络的权限;因此我不能简单地将模型的输出张量添加到我的模型中。

### TODO: Obtain bottleneck features from another pre-trained CNN.
bottleneck_features = np.load('/data/bottleneck_features/DogXceptionData.npz')
train_Xception = bottleneck_features['train']
valid_Xception = bottleneck_features['valid']
test_Xception = bottleneck_features['test']
### TODO: Define your architecture.
import keras
print(keras.__version__)
transfertrained_model = Sequential()
transfertrained_model.add(Conv2D(20,(2,2),input_shape=(train_Xception.shape[1],train_Xception.shape[2],3)))
transfertrained_model.add(Conv2D(40,(2,2)))
transfertrained_model.add(MaxPooling2D())
transfertrained_model.add(Conv2D(40,(2,2)))
transfertrained_model.add(MaxPooling2D())
transfertrained_model.add(Conv2D(80,(2,2)))
transfertrained_model.add(MaxPooling2D())
transfertrained_model.add(GlobalAveragePooling2D())
transfertrained_model.add(Dense(133))
transfertrained_model.add(Activation('sigmoid'))
transfertrained_model.summary()

设置:

Python 3 Keras 2.0.9

我已经阅读的问题

在GitHub(https://github.com/keras-team/keras/issues/7611)上的帖子建议我应该使用Keras 2 API。因为我是我,所以此建议不适用于我。

另一个StackOverflow答案(Negative dimension size caused by subtracting 3 from 1 for 'conv2d_2/convolution')建议我将data_format设置为“ channels_first”。我这样做了,然后MaxPooling2D层抱怨了同样的错误。

请帮助!

1 个答案:

答案 0 :(得分:0)

啊!我找到了答案。我需要在Conv2D图层中添加padding ='same',以防止它们缩小输出张量的大小。