Keras Data Augmentation with ImageDataGenerator(您的输入已用尽数据)

3

我目前正在学习如何使用Keras ImageDataGenerator执行数据增强,来源于François Chollet的 "Deep learning with Keras"。

我现在在训练数据集中有1000张狗和1000张猫的图片。

我还有500条狗和500条猫的图片在验证数据集中。

该书将批量大小(batch size)定义为生成器中用于数据增强时的"step_per_epoch"和"epoch"的值,对于训练和验证数据集都是32。

然而,在我训练模型时,我收到了Tensorflow 警告:"Your input ran out of data..."(你的输入已经没有更多数据...),并停止了训练过程。

我在网上搜索了很多解决方案,其中许多方案提到步数(steps_per_epoch)应为:steps_per_epoch = len(train_dataset) // batch_sizesteps_per_epoch = len(validation_dataset) // batch_size

我理解上述逻辑,并且在训练中没有出现警告。

但我想知道,最初我只有2000个训练样本。这太少了,所以我需要进行数据增强来增加训练图像的数量。如果应用 steps_per_epoch = len(train_dataset) // batch_size ,由于 len(train_dataset) 只有2000,那么我是否仍在使用2000个样本来训练模型,而不是添加更多的增强图像到模型中?

train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary')

history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=100,
validation_data=validation_generator,
validation_steps=50)
1个回答

4
imagedatagenerator不会增加训练集的大小,所有的数据增强都是在内存中完成的。因此,一个原始图像会被随机增强,然后返回其增强版本。如果您想查看增强后的图像,需要为函数flow_from_directory设置以下参数:
save_to_dir=path,
save_prefix="",
save_format="png",

现在你有2000张图片,批量大小为32,每个epoch应该有2000 // 32 = 62个步骤,但是你尝试设置100个步骤,这导致了错误。

如果你有一个不能生成批次并且想使用所有数据点的数据集,则应设置:

steps_per_epoch = len(train_dataset) // batch_size

当您使用flow_from_directory时,它会生成批次(batch),因此无需设置steps_per_epoch,除非您希望使用少于生成批次的数据点。


谢谢您的回答。"所有增强都是在内存中完成",代码没有指定会生成多少新图像(增强)。那么我怎么知道会为训练生成多少张图片?或者我不需要知道 --> 所有操作都是随机完成的? - kelvin.aaa2
2
@kelvin.aaa2 Keras的imagedatagenerator接受用于训练的一批图像。它接收该批次,然后对批次中的每个图像应用一系列随机变换(任何您想要的增强方式)。然后关键部分是:它用新的、随机变换的批次替换原始批次。训练是在这个随机变换的批次上完成的。 - Frightera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接