我正在尝试在一些图像数据上训练自动编码器。数据集非常庞大,以至于无法容纳在内存中。因此,很明显,我希望借助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_directory
,flow
和flow_from_dataframe
,但是在那些情况下,我要解决分类问题,并且目录中有n个类的n个文件夹。
如何根据需要从目录中加载图像以训练自动编码器?在here上的Keras文档中,我看到了
class_mode : "input" will be images identical to input images (mainly used to work with autoencoders)
但这也不能解决问题。
我发现一个解决方法是在火车内创建另一个文件夹,然后将所有文件移入其中。除此之外,还有其他直接方法吗?
答案 0 :(得分:2)
Keras文档在这里确实不是很精确,并且它的实际工作方式也不直观(至少对我而言)...
在这里,即使您使用的是class_mode='input'
,这意味着不存在任何类别(或每张图片都是其自己的类别,但是您想用它来表述),您的图像仍必须位于子文件夹。
因此,在您的Train
文件夹中,只需创建另一个子文件夹并将所有图像移入其中即可。然后输出将为Found xxx images belonging to 1 classes.
您甚至可以拥有多个子文件夹,生成的X
和Y
数据将是相同的,只是控制台输出将是不同的(并且容易引起误解):Found xxx images belonging to yy classes.
如果实际上有类并且您有另一个使用它们的模型(使用class_mode='categorical'
或class_mode='binary'
),这可能会很有用。然后,该模型可以从同一文件夹加载其数据。