Размеры вывода Keras слоя VGG19 Conv4-1 не совпадают с выходом модели - PullRequest
0 голосов
/ 02 мая 2019
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 голосов
/ 02 мая 2019

VGG19 принимает входные данные (224, 224, 3) по умолчанию. Если вы примените к нему 3 слоя максимального пула, вы получите (28,28, num_kernels).

Но вы вводите (256, 256, 3). Таким образом, если вы примените к этому 3 слоя с максимальным пулом, вы получите (32, 32, num_kernels).

После 1-го слоя максимального пула - (128, 128, num_kernels)
После 2-го слоя максимального пула - (64, 64, num_kernels)
После 3-го уровня максимального пула - (32, 32, num_kernels)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...