Я следую учебному пособию из блога keras (https://blog.keras.io/building-autoencoders-in-keras.html) для создания автоэнкодера.
Я использовал свой собственный набор данных и использую следующий код на своем изображении размером 224 * 224.
input_img = Input(shape=(224,224,1)) # size of the input image
x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)
# at this point the representation is (4, 4, 8) i.e. 128-dimensional
x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
Когда я вижу сводку автоэнкодера, она выдает результат такой, что последний слой имеет 220 на 220. Я прикрепил снимок этой сводки.
То, чего я не понимаюВот как он конвертируется в 110 * 110 из 112 * 112. Я ожидал, что conv2d_6 (Conv2D) даст мне 112 * 112 с 16 ядрами.
Если я удаляю слой Conv2D_6, он будет работать. Но я хотел его получить, иначе я буду выполнять UpSampling дважды. Я не понимаю, в чём дело.
Может кто-нибудь подсказать мне об этом?