7

我正在使用 Keras 训练图像分类 CNN。使用该ImageDataGenerator函数,我对训练图像应用了一些随机变换(例如旋转、剪切、缩放)。我的理解是,这些转换在传递给模型之前会随机应用于每个图像。

但有些事情我不清楚:

1) 如何确保训练时包含图像的特定旋转(例如 90°、180°、270°)。

2)steps_per_epoch参数model.fit_generator应设置为数据集的唯一样本数除以flow_from_directory方法中定义的批量大小。这在使用上述图像增强方法时是否仍然适用,因为它们增加了训练图像的数量?

谢谢,马里奥

4

1 回答 1

3

前段时间我向自己提出了同样的问题,我认为可能的解释在这里:

考虑这个例子:

    aug = ImageDataGenerator(rotation_range=90, width_shift_range=0.1, 
                             height_shift_range=0.1, shear_range=0.2, 
                             zoom_range=0.2, horizontal_flip=True, 
                             fill_mode="nearest")

对于问题 1):我指定了一个 rotation_range=90,这意味着当您流动(检索)数据时,生成器将随机将图像旋转 0 到 90 度之间的度数。您无法指定确切的角度,因为这就是 ImageDataGenerator 所做的:随机生成旋转。关于你的第二个问题也很重要。

对于问题 2):是的,它仍然适用于数据增强方法。一开始我也很困惑。原因是由于图像是随机生成的,对于每个 epoch,网络看到的图像都与前一个 epoch 不同。这就是数据被“增强”的原因——增强不是在一个时期内完成,而是在整个训练过程中完成。但是,我看到其他人指定原始steps_per_epoch 的2x 值。

希望这可以帮助

于 2018-11-16T13:10:36.470 回答