【问题标题】:ImageDataGenerator error图像数据生成器错误
【发布时间】:2016-05-28 06:16:52
【问题描述】:

我需要帮助尝试修复 Keras 中简单自动编码器的代码。我试图为 Keras 博客上的自动编码器教程添加一些图像预处理。这就是我所做的

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 函数引发的。

【问题讨论】:

    标签: python keras


    【解决方案1】:

    这件事是我自己想出来的。结果 ImageDataGenerator 假设输入的形状为 (number_of_samples,number_of_channels,width,height)。 重塑 train_imgstest_imgs 成功了。我已经修改了问题中的代码以包含这个额外的维度。

    【讨论】:

      【解决方案2】:

      您需要像这样将 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

      【讨论】:

        【解决方案3】:

        我认为您忘记了拟合数据生成模型。请在autoencoder.fit_generator 之前添加datagen.fit(train_imgs) 并尝试训练您的模型。

        【讨论】:

          猜你喜欢
          • 2022-10-01
          • 1970-01-01
          • 2013-04-18
          • 2020-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-28
          相关资源
          最近更新 更多