这是我的自编码器模型:
input_img = Input(shape=(1, 32, 32))x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)x = MaxPooling2D((2, 2), border_mode='same')(x)x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)x = MaxPooling2D((2, 2), border_mode='same')(x)x = Convolution2D(8, 2, 2, activation='relu', border_mode='same')(x)encoded = MaxPooling2D((2, 2), border_mode='same')(x)x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)x = UpSampling2D((2, 2))(x)x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)x = UpSampling2D((2, 2))(x)x = Convolution2D(16, 3, 3, activation='relu')(x)x = UpSampling2D((2, 2))(x)decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x)autoencoder = Model(input_img, decoded)autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
这是我的训练和预测函数:
autoencoder.fit(X_train, X_train, nb_epoch=10, batch_size=128, shuffle=True, validation_data=(X_test, X_test))decoded_imgs = autoencoder.predict(X_test)
当我尝试编译时,我得到了以下错误。我的数据集中的所有图像都是32×32像素。为什么会出现这个错误?
Exception: Error when checking model target: expected convolution2d_7 to have shape (None, 1, 28, 28) but got array with shape (4200, 1, 32, 32)
我需要对模型做哪些更改,使输入形状变为(1,32,32)?
回答:
这很简单:
input_img = Input(shape=(1, 32, 32))x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)x = MaxPooling2D((2, 2), border_mode='same')(x)x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)x = MaxPooling2D((2, 2), border_mode='same')(x)x = Convolution2D(8, 2, 2, activation='relu', border_mode='same')(x)encoded = MaxPooling2D((2, 2), border_mode='same')(x)x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)x = UpSampling2D((2, 2))(x)x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)x = UpSampling2D((2, 2))(x)x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(x)x = UpSampling2D((2, 2))(x)decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x)autoencoder = Model(input_img, decoded)autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
你忘记在第六个卷积层添加适当的 border_mode='same'
参数了。