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)