代码之家  ›  专栏  ›  技术社区  ›  Md Shopon

编译自动编码器时keras出错?

  •  1
  • Md Shopon  · 技术社区  · 8 年前

    这是我的自动编码器的型号:

    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)
    

    当我试图编译这个时,我得到了以下错误。 我的数据集的所有图像都是32x32像素。那么为什么会出现这个错误呢?

    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)?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Marcin Możejko    8 年前

    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' 在第6卷积层。