如何实现flow_from_directory?

时间:2019-05-14 15:57:56

标签: python machine-learning keras deep-learning

我的主要问题是,是否会针对每个时期对目录中的每个样本进行迭代?我有6个类别的目录,每个类别中的样本数量几乎相同,当我使用batch_size=16训练模型时,它根本不起作用,只能正确预测1个类别。使batch_size=128使得它可以高精度地预测3个类别,而其他3个类别则从未出现在测试预测中。为什么这样做呢?是否每个steps_per_epoch都唯一地生成并且只记住该批次的样本?这意味着它不会记住上次使用的批次样本,并且会创建新的随机批次,有可能使用已使用的样本而错过其他样本,如果是这样,则意味着它会丢失整个类的样本,而克服这一问题的唯一方法是增加{{ 1}},以便它可以一批记住它。我不能将batch_size增加到128以上,因为我的GPU内存不足。
那我该怎么办?
这是我的batch_size

代码
ImageDataGenerator

这是train_d = ImageDataGenerator(rescale=1. / 255, shear_range=0.2, zoom_range=0.1, validation_split=0.2, rotation_range=10., width_shift_range=0.1, height_shift_range=0.1) train_s = train_d.flow_from_directory('./images/', target_size=(width, height), class_mode='categorical', batch_size=32, subset='training') validation_s = train_d.flow_from_directory('./images/', target_size=(width, height), class_mode='categorical', subset='validation')

的代码
fit_generator

1 个答案:

答案 0 :(得分:0)

是的,每个时期都对每个文件夹中的每个样本进行迭代。这是en epoch的定义,它是对整个数据集的完整传递。

steps_per_epoch应该设置为len(dataset) / batch_size,然后唯一的问题是当批次大小没有完全除以样本数时,在这种情况下,您将steps_per_epoch向上舍入为最后一个批次小于batch_size