ValueError:检查目标时出错:预期模型_2 具有形状(无、252、252、1)但得到形状为(300、128、128、3)的数组 [英] ValueError: Error when checking target: expected model_2 to have shape (None, 252, 252, 1) but got array with shape (300, 128, 128, 3)

查看:30
本文介绍了ValueError:检查目标时出错:预期模型_2 具有形状(无、252、252、1)但得到形状为(300、128、128、3)的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为一类分类构建一个图像分类器,其中我在运行此模型时使用了自动编码器我通过这一行收到此错误 (autoencoder_model.fit)(ValueError: Error when checks target: expected model_2 to有形状 (None, 252, 252, 1) 但得到形状为 (300, 128, 128, 3) 的数组.)

hi I am building a image classifier for one-class classification in which i've used autoencoder while running this model I am getting this error by this line (autoencoder_model.fit) (ValueError: Error when checking target: expected model_2 to have shape (None, 252, 252, 1) but got array with shape (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')])

推荐答案

这是解码器的输出形状与训练数据的形状之间的简单不兼容.(目标是指输出).

It's a simple incompatibility between the output shape of the decoder and the shape of your training data. (Target means output).

我看到您有 2 个 MaxPooling(将图像大小除以 4)和三个上采样(将解码器的输入乘以 8).

I see you've got 2 MaxPoolings (dividing your image size by 4), and three upsamplings (multiplying the decoder's input by 8).

自动编码器的最终输出太大,与您的数据不匹配.您必须简单地在模型中工作以使输出形状与您的训练数据相匹配.

The final output of the autoencoder is too big and doesn't match your data. You must simply work in the model to make the output shape match your training data.

这篇关于ValueError:检查目标时出错:预期模型_2 具有形状(无、252、252、1)但得到形状为(300、128、128、3)的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆