1

オートエンコーダーを構築するために、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 レイヤーを削除すると機能します。しかし、私はそれをしたいと思っていました。何が悪いのかわかりません。

誰かがこれについて私を案内できますか?

4

1 に答える 1