オートエンコーダーを構築するために、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')
autoencoder の概要を見ると、最後のレイヤーが 220 x 220 になるような出力が得られます。その概要のスナップショットを添付しました。
私が理解していないのは、112*112 から 110*110 にどのように変換されるのかということです。conv2d_6 (Conv2D) が 112*112 で 16 個のカーネルを提供することを期待していました。
Conv2D_6 レイヤーを削除すると機能します。しかし、私はそれをしたいと思っていました。何が悪いのかわかりません。
誰かがこれについて私を案内できますか?