在 keras 中拟合生成器和数据增强

Posted

技术标签:

【中文标题】在 keras 中拟合生成器和数据增强【英文标题】:Fit generator and data augmentation in keras 【发布时间】:2018-03-29 02:26:59 【问题描述】:

我有一个包含 5 个样本的测试数据集和一个包含 2000 个样本的训练数据集。我想扩充我的数据集,并按照keras提供的示例进行操作

datagen_test = ImageDataGenerator(
                featurewise_center=True,
                featurewise_std_normalization=True,
                rotation_range=20,
                width_shift_range=0.2,
                height_shift_range=0.2,
                horizontal_flip=True
                )
datagen_train = ImageDataGenerator(
                featurewise_center=True,
                featurewise_std_normalization=True,
                rotation_range=20,
                width_shift_range=0.2,
                height_shift_range=0.2,
                horizontal_flip=True
                )
datagen_train.fit(x_train)
validation_generator = datagen_test.flow(x_test, y_test, batch_size=5)


model.compile(loss=keras.losses.categorical_crossentropy,
          optimizer='rmsprop',
          metrics=['accuracy'])
# fits the model on batches with real-time data augmentation:
model.fit_generator(datagen_train.flow(x_train, y_train, batch_size=50),
                steps_per_epoch=len(x_train) / 10, epochs=epochs, 
                validation_data=validation_generator, validation_steps=800)

我认为 steps_per_epoch 参数是传递给分类器的批次数。我将生成器中的 batch_size 设置为 50,但我只有 5 个样本。我认为我的问题与 samples_per_epoch 无关,它是一个时期内处理的样本数。

我的问题是: 生成器会转换我的图像以创建 50 个不同的样本并将它们传递给分类器还是只转换 5 个?

【问题讨论】:

Augementations in Keras ImageDataGenerator的可能重复 @WilmarvanOmmeren 不完全是 检查这个:When the data set size is not a multiple of the mini-batch size, should the last mini-batch be smaller, or contain samples from other batches? 我不相信将批量大小设置为 50 会导致生成器通过转换原始 5 来创建 50 个图像。除此之外,可能值得查看下面有关数据增强的视频Keras,我看到您在 steps_per_epoch 和 validation_steps 中使用的数字似乎不符合惯例。 youtu.be/1WVbqNbWCjk 【参考方案1】:

不幸的是 - 当您将 batch_size 设置为 50 时,您只有 5 个示例,这将使您的生成器在每批中仅返回 5 个示例(尽管有 batch_size)。所以它不会将您的批次扩展到50

【讨论】:

以上是关于在 keras 中拟合生成器和数据增强的主要内容,如果未能解决你的问题,请参考以下文章

keras训练函数fit和fit_generator对比,图像生成器ImageDataGenerator数据增强

如何使用批处理为大型数据集拟合 Keras ImageDataGenerator

使用 Keras 随机增强图像

使用 ImageDataGenerator 进行 Keras 数据增强(您的输入没有数据)

数据增强期间的 Keras CONV 训练似乎显示了错误的批量大小和训练示例数量

如何使用 Keras(增强、拆分)预处理我的 ImageDataset