ImageDataGenerator错误

时间:2016-05-28 06:16:53

标签: python keras

我需要帮助尝试在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函数引发的。

3 个答案:

答案 0 :(得分:4)

自己想出这件事。事实证明,ImageDataGenerator假定输入的形状(number_of_samples,number_of_channels,width,height)。 重塑train_imgstest_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,然后尝试训练您的模型。