Я изучаю 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
_________________________________________________________________
Как вы заметите, выход из слоя объединения будет такого же размера, как и вход. Что может быть причиной этого?
Это была глупая ошибка. Результат зависит от типа заполнения, используемого с пулом. Ниже приведен правильный результат.
pool = MaxPooling2D(pool_size=4, strides=1, padding='valid')(in_feats)
Вы можете больше узнать о заполнении здесь