Функциональный API-интерфейс Keras: пул ввода не дает правильной формы вывода

1

Я изучаю Keras с Tensorflow, и я строю как очень простую модель, которая принимает входное изображение размера 224x224x3 и применяет MaxPooling, сглаживает его в 1D-вектор, и этот 1D-вектор является выходом.

Обратите внимание, что эта модель просто предназначена для учебной цели. Однако, когда я вижу сводку модели, то есть model.summary() выход слоя объединения имеет тот же размер, что и вход.

Код:

    in_shape = (224, 224, 3)
    in_feats = Input(shape=in_shape)
    pool = MaxPooling2D(pool_size=4, strides=1, padding='same')(in_feats)
    flat = Flatten(name='flat')(pool)
    model = Model(inputs=in_feats, outputs=flat)
    # print summary
    print (model.summary())

Резюме состоит в следующем:

Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
pool (MaxPooling2D)          (None, 224, 224, 3)       0         
_________________________________________________________________
flat (Flatten)               (None, 150528)            0         
=================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 0
_________________________________________________________________

Как вы заметите, выход из слоя объединения будет такого же размера, как и вход. Что может быть причиной этого?

Теги:
tensorflow
keras
deep-learning

1 ответ

1

Это была глупая ошибка. Результат зависит от типа заполнения, используемого с пулом. Ниже приведен правильный результат.

pool = MaxPooling2D(pool_size=4, strides=1, padding='valid')(in_feats)

Вы можете больше узнать о заполнении здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню