我正在做一个机器学习项目,其中涉及通过卷积神经网络对狗进行分类。我正在通过预先学习的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层抱怨了同样的错误。
请帮助!
答案 0 :(得分:0)
啊!我找到了答案。我需要在Conv2D图层中添加padding ='same',以防止它们缩小输出张量的大小。