使用针对AutoEncoder的flow_from_directory来按需加载数据

时间:2019-03-08 11:03:56

标签: keras deep-learning

我正在尝试在一些图像数据上训练自动编码器。数据集非常庞大,以至于无法容纳在内存中。因此,很明显,我希望借助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)

但这也不能解决问题。

我发现一个解决方法是在火车内创建另一个文件夹,然后将所有文件移入其中。除此之外,还有其他直接方法吗?

1 个答案:

答案 0 :(得分:2)

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'),这可能会很有用。然后,该模型可以从同一文件夹加载其数据。