我的主要问题是,是否会针对每个时期对目录中的每个样本进行迭代?我有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
答案 0 :(得分:0)
是的,每个时期都对每个文件夹中的每个样本进行迭代。这是en epoch的定义,它是对整个数据集的完整传递。
steps_per_epoch
应该设置为len(dataset) / batch_size
,然后唯一的问题是当批次大小没有完全除以样本数时,在这种情况下,您将steps_per_epoch
向上舍入为最后一个批次小于batch_size
。