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)
答案 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)