首页 > 解决方案 > 如何在没有负维度大小的情况下实现 Conv2D 和 maxpooling2d

问题描述

我正在尝试将 Conv2D 和 Maxpooling 添加到我的头部模型中,但我似乎无法这样做

headModel = baseModel.output
headModel = (Conv2D(448,(3,3),input_shape=data.shape[1:]))(headModel)
headModel = (MaxPooling2D(pool_size=(7,7)))(headModel)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(128, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(2, activation="softmax")(headModel)

Maxpooling2D 在我添加 conv2D 之前完美运行,但是一旦我这样做,我就会收到以下错误

'{{node max_pooling2d_6/MaxPool}} = MaxPoolT=DT_FLOAT, data_format="NHWC", explicit_paddings=[], ksize=[1, 7, 7, 1], padding=" VALID", strides=[1, 7, 7, 1]' 输入形状:[?,5,5,448]。在处理上述异常的过程中,又出现了一个异常:ValueError Traceback (most recent call last)

理想情况下,我想要 2 个 Maxpooling 层和 2 个 Conv2D 层,所以我可以拥有类似于这个 CNN 架构的东西

谢谢

标签: pythontensorflowmachine-learningkerasconv-neural-network

解决方案


您可以设置padding='same'哪个将向特征图添加零填充,从而保留特征图的尺寸。

当您尝试在特征图上执行卷积或最大池化时会出现异常(如问题中所述),这种情况无法进一步减少。例如,您的特征图的大小是( 2 , 2 , 32 )您不能在其上执行内核大小为 3 的卷积(使用 padding= valid)。


推荐阅读