我需要帮助尝试在Keras中为简单的自动编码器修复此代码。我试图在Keras博客上为autoencoder教程添加一些图像预处理。这就是我所做的
input_image = Input(shape=(1,256,256,))
flattened = Flatten()(input_image)
encoded = Dense(128,activation='relu',name='Dense1')(flattened)
decoded = Dense(256*256, activation='sigmoid',name='Dense2')(encoded)
output_image = Reshape((1,256,256,))(decoded)
autoencoder = Model(input_image,output_image)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True)
autoencoder.fit_generator(datagen.flow(train_imgs, train_imgs,
batch_size=32),
samples_per_epoch=train_imgs.shape[0],
nb_epoch=50,
validation_data=(test_imgs,test_imgs))
train_imgs
具有形状(1000,256,256),其中1000是训练样本的数量。 test_imgs
有形状(50,256,256)。
这是我得到的错误
异常:生成器的输出应该是元组(x,y,sample_weight) 或(x,y)。发现:无
这是由fit_generator
函数引发的。
答案 0 :(得分:4)
自己想出这件事。事实证明,ImageDataGenerator假定输入的形状(number_of_samples,number_of_channels,width,height)。
重塑train_imgs
和test_imgs
就可以了。我修改了问题中的代码以包含这个额外的维度。
答案 1 :(得分:0)
您需要将class_mode更改为'输入'像这样:
autoencoder.fit_generator(datagen.flow(train_imgs, train_imgs,
batch_size=32,class_mode='input'),
samples_per_epoch=train_imgs.shape[0],
nb_epoch=50,
validation_data=(test_imgs,test_imgs))
您可以阅读更多here
答案 2 :(得分:-1)
我认为您忘记了适合datagen模型。请在datagen.fit(train_imgs)
之前添加autoencoder.fit_generator
,然后尝试训练您的模型。