在 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
使用 ImageDataGenerator 进行 Keras 数据增强(您的输入没有数据)