代码之家  ›  专栏  ›  技术社区  ›  Montana Burr

“max”pooling2d“u 14/maxpool”(op:“maxpool”)的维度大小为负,这是由输入形状:[?,40,1,8条]

  •  -2
  • Montana Burr  · 技术社区  · 6 年前

    我正在做一个机器学习项目,用卷积神经网络对狗进行分类。我正在Keras建立自己的神经网络,使用预先训练过的异常神经网络进行转移学习。在创建神经网络的过程中,我遇到了以下错误:

    从1中减去2导致的尺寸为负 “Max_Pooling2d_2/MaxPool”(操作:“MaxPool”),输入形状: [?1,1,40]。

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

    ### 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' )建议我将数据格式设置为“频道优先”。我做到了,然后maxpooling2d层抱怨同样的错误。

    请帮助!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Montana Burr    6 年前

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