ожидается, что conv2d_7 будет иметь форму (220, 220, 1), но получит массив с формой (224, 224, 1) - PullRequest
0 голосов
/ 09 февраля 2019

Я следую учебному пособию из блога 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 ядрами.

enter image description here

Если я удаляю слой Conv2D_6, он будет работать. Но я хотел его получить, иначе я буду выполнять UpSampling дважды. Я не понимаю, в чём дело.

Может кто-нибудь подсказать мне об этом?

1 Ответ

0 голосов
/ 09 февраля 2019

Вам нужно добавить padding='same' к этому слою, чтобы он выглядел следующим образом:

x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)

Тогда он сохранит те же размеры.Без него вы не будете использовать никакие отступы, и поскольку ваше ядро ​​имеет размер 3 на 3, ваш 112 * 112 преобразуется в 110 * 110 после этого слоя.

...