私はkerasで最初の畳み込みオートエンコーダーを作成しようとしていますが、レイヤー出力の形状に問題があります。私のコードがあります:Python、keras、Convolutional autoencoder
input_img = Input(shape=X_train.shape[1:])
x = Conv2D(32, (3, 3), activation='relu', padding='same', kernel_constraint=maxnorm(3))(input_img)
x = MaxPooling2D(pool_size=(2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same', kernel_constraint=maxnorm(3))(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same', kernel_constraint=maxnorm(3))(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same', kernel_constraint=maxnorm(3))(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
print(autoencoder.summary())
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
autoencoder.fit(X_train, X_train, epochs=50, batch_size=32)
と結果:
_________________________________________________________________
Layer (type) Output Shape Param
=================================================================
input_87 (InputLayer) (None, 32, 32, 3) 0
_________________________________________________________________
conv2d_327 (Conv2D) (None, 32, 32, 3) 9248
_________________________________________________________________
max_pooling2d_136 (MaxPoolin (None, 32, 16, 2) 0
_________________________________________________________________
conv2d_328 (Conv2D) (None, 16, 16, 2) 4624
_________________________________________________________________
max_pooling2d_137 (MaxPoolin (None, 16, 8, 1) 0
_________________________________________________________________
conv2d_329 (Conv2D) (None, 16, 8, 1) 2320
_________________________________________________________________
up_sampling2d_124 (UpSamplin (None, 16, 16, 2) 0
_________________________________________________________________
conv2d_330 (Conv2D) (None, 32, 16, 2) 4640
_________________________________________________________________
up_sampling2d_125 (UpSamplin (None, 32, 32, 4) 0
_________________________________________________________________
conv2d_331 (Conv2D) (None, 1, 32, 4) 289
=================================================================
Total params: 21,121
Trainable params: 21,121
Non-trainable params: 0
_________________________________________________________________
None
そしてもちろんエラーの:
ValueError: Error when checking target: expected conv2d_331 to have shape (None, 1, 32, 4) but got array with shape (50000, 32, 32, 3)
はあなたに私が間違ってやっている任意のアイデアをお持ちですか?なぜ最後のUpSampling2Dがその形状を返すのですか?
https://stackoverflow.com/questions/47822154/layer-conv2d-3-w入力とは無関係に、象徴的なテンソルではありません。 –