VGG19 Conv4-1 层的 Keras 输出维度与模型输出不匹配

Keras Output Dimensions of VGG19 Conv4-1 Layer doesn't match up with model output

import numpy as np
from PIL import Image
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input

要创建我使用的 VGG19 模型:

img = Input(shape=(256,256,3))
vgg = VGG19(weights="imagenet")
vgg.outputs = [vgg.get_layer('block4_conv1').output]
model = Model(inputs=img, outputs=vgg(img))

然后在 model.summary() 我看到:

block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160

我的预期尺寸是 (28,28,512)

要将图像加载到我使用的网络中:

img = image.load_img("./path-to-image.jpeg", target_size=(256, 256))
img = preprocess_input(np.array(img))

但是,当我将我的图像放入模型中时,我的输出维度是 (1, 32, 32, 512) 并且为什么会发生这种情况是没有意义的!

获取输出维度 I 运行:

img_out = \
    model.predict(
        np.expand_dims(img, 0), 
        batch_size=1
    )

img_out.shape
>>> (1, 32, 32, 512) != (28,28,512)

VGG19 默认采用输入 (224, 224, 3)。如果你对其应用 3 个最大池化层,你将得到 (28,28, num_kernels)。

但是,您的输入是 (256, 256, 3)。所以,如果你对它应用 3 个最大池化层,你最终会得到 (32, 32, num_kernels).

在第一个最大池化层之后 - (128, 128, num_kernels)
在第二个最大池层之后 - (64, 64, num_kernels)
在第 3 个最大池层之后 - (32, 32, num_kernels)