【问题标题】:Load data on demand using flow_from_directory for AutoEncoder使用自动编码器的 flow_from_directory 按需加载数据
【发布时间】:2019-03-08 21:45:34
【问题描述】:

我正在尝试在一些图像数据上训练自动编码器。数据集非常庞大,以至于它不适合内存。所以很明显我想在 Keras 的flow_from_directory 的帮助下按需加载目录中的数据。

我的数据集结构如下

./Dataset/
    ./Train/
        ../1.jpg
        ../2.jpg

等等。

我试着像这样使用flow_from_directory

train_generator = datagen.flow_from_directory(
    TRAIN_FOLDER,
    target_size = (256, 256),
    color_mode = 'rgb',
    batch_size = batch_size,
    class_mode = 'input')

这给了我一个输出 Found 0 images belonging to 0 classes. 如果我尝试用这个生成器拟合模型,我会得到一个 ZeroDivisionError

我在各种场合都使用过flow_from_directoryflowflow_from_dataframe,但在这些情况下,我要解决分类问题,并且目录中有n 个文件夹用于n 个类。

如何根据需要从目录加载图像以训练自动编码器。?从here 的 Keras 文档中我看到了

class_mode : "input" will be images identical to input images (mainly used to work with autoencoders)

但这也不能解决问题。

我发现的一个解决方法是在火车内创建另一个文件夹并将所有文件移动到该文件夹​​中。除了这个还有什么直接的方法吗?

【问题讨论】:

    标签: keras deep-learning


    【解决方案1】:

    Keras 文档在这里确实不是很精确,而且它的实际工作方式并不直观(至少对我而言)......

    这里,即使你使用class_mode='input',这意味着没有类(或者每张图片都是它自己的类,但你喜欢用它来表达),你的图片仍然必须在子文件夹内。

    因此,在您的 Train 文件夹中创建另一个子文件夹并将所有图像移到其中。那么输出将是Found xxx images belonging to 1 classes.

    您甚至可以有多个子文件夹,生成的XY 数据将是相同的,只是控制台输出会不同(并且会产生误导):Found xxx images belonging to yy classes. 如果确实有类并且您有另一个模型使用它们(使用class_mode='categorical'class_mode='binary'),这可能很有用。然后这个模型可以从同一个文件夹中加载它的数据。

    【讨论】:

    • 我也是这样做的。在Train 中创建名为TRAIN 的文件夹,即Train//TRAIN,并将Train// 中的图像文件移动到Train//TRAIN。然后它似乎工作。我在想还有其他方法可以告诉flow_from_directory 不需要寻找子文件夹
    • @SreeramTP 哦,该死的,我完全错过了你的最后一段。对不起。所以,不,我现在经常面临这个问题,我不知道有任何“直接”的方式。
    • 您的回答将对面临此问题并正在寻找快速解决方案/解决方法的其他人有所帮助
    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 2017-07-29
    • 2020-12-24
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多