【问题标题】:How to fit an autoencoder using flow_from_directory如何使用 flow_from_directory 拟合自动编码器
【发布时间】:2021-05-22 17:00:56
【问题描述】:

我正在构建一个基本的自动编码器,并使用此处的 keras 文档作为指南:https://blog.keras.io/building-autoencoders-in-keras.html

我被卡住并切换它以适应 flow_from_directory 对象,这是我设置的对象:

data_gen = tf.keras.preprocessing.image.ImageDataGenerator()

train_generator = data_gen.flow_from_directory(
    directory= 'train_images',
    target_size=(28, 28),
    color_mode="rgb",
    batch_size=128,
    shuffle=True,
    seed=42,
    class_mode=None,
)

我正在尝试拟合模型(这与使用此代码的 keras 文档中的模型大致相同:

autoencoder.fit(train_generator, train_generator,
                epochs=500,
                shuffle=True)

但是,问题是像这样传递它会给我这个错误:

`ValueError: `y` argument is not supported 

认为也许这是说如果我的 x 来自 flow_for_directory,我无法指定 y,这是有道理的,但我如何指定标签与数据本身相同?

【问题讨论】:

  • 设置class_mode = 'input' 然后fit() 中的一个生成器应该没问题。

标签: python-3.x keras tensorflow2.0


【解决方案1】:

把答案放在这里,以防它帮助其他人。正如 Frightera 在 cmets 中建议的那样,将 class_mode 更改为 'input' 解决了这个问题:

data_gen = tf.keras.preprocessing.image.ImageDataGenerator()

train_generator = data_gen.flow_from_directory(
    directory= 'train_images',
    target_size=(28, 28),
    color_mode="rgb",
    batch_size=128,
    shuffle=True,
    seed=42,
    class_mode='input',
)

autoencoder.fit(train_generator,
                epochs=500,
                shuffle=True)

【讨论】:

    【解决方案2】:

    尝试修改你的拟合函数:

    autoencoder.fit(train_generator,
                epochs=500,
                shuffle=True)
    

    您使用train_generator 两次,当您使用ImageDataGenerator.flow_from_directory 函数时,它返回一个DirectoryIterator 产生(x, y) 的元组,其中x 是一个包含数据批次的numpy 数组,y 是一个对应标签的numpy 数组.

    请参考 Keras 文档: https://keras.io/api/preprocessing/image/#flowfromdirectory-method

    【讨论】:

    • 谢谢舒贾特!我的问题专门与 x 和 y 相同的自动编码器有关,因此只需单独传入 train_generator 即可,但仅选择了“输入”类模式(我给出了带有工作代码详细信息的答案)
    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2021-05-21
    • 2023-03-28
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    相关资源
    最近更新 更多