嗨,我正在为一类分类构建图像分类器,其中在运行此模型时使用了自动编码器,我在此行得到此错误(autoencoder_model.fit)(ValueError:检查目标时出错:预期model_2具有形状(无,252,252,1)但得到形状为(300,128,128,3)的数组。)
num_of_samples = img_data.shape[0] labels = np.ones((num_of_samples,),dtype='int64') labels[0:376]=0 names = ['cats'] input_shape=img_data[0].shape X_train, X_test = train_test_split(img_data, test_size=0.2, random_state=2) inputTensor = Input(input_shape) x = Conv2D(16, (3, 3), activation='relu', padding='same')(inputTensor) 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_data = MaxPooling2D((2, 2), padding='same')(x) encoder_model = Model(inputTensor,encoded_data) # at this point the representation is (4, 4, 8) i.e. 128-dimensional encoded_input = Input((4,4,8)) x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded_input) 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',padding='same')(x) x = UpSampling2D((2, 2))(x) decoded_data = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x) decoder_model = Model(encoded_input,decoded_data) autoencoder_input = Input(input_shape) encoded = encoder_model(autoencoder_input) decoded = decoder_model(encoded) autoencoder_model = Model(autoencoder_input, decoded) autoencoder_model.compile(optimizer='adadelta', `enter code here`loss='binary_crossentropy') autoencoder_model.fit(X_train, X_train, epochs=50, batch_size=32, validation_data=(X_test, X_test), callbacks=[TensorBoard(log_dir='/tmp/autoencoder')])
解码器的输出形状与训练数据的形状之间根本不兼容。(目标表示输出)。
我看到您有2个MaxPoolings(将图像大小除以4)和3个上采样(将解码器的输入乘以8)。
自动编码器的最终输出太大,与您的数据不匹配。您必须简单地在模型中工作,以使输出形状与您的训练数据匹配。