VGG19 Conv4-1图层的Keras输出尺寸与模型输出不匹配

时间:2019-05-01 21:47:49

标签: python tensorflow keras vgg-net

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),对于为什么会发生这种情况没有任何意义!

要获取输出尺寸,请运行:

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

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

1 个答案:

答案 0 :(得分:0)

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)
在第三个最大池层之后-(32,32,num_kernels)