Keras图像增强:如何选择“每个步骤的步骤”参数并在训练期间包括特定的增强?

时间:2017-08-31 07:32:24

标签: python image deep-learning keras image-preprocessing

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

但有些事情我不清楚:

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

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

谢谢, 马里奥

1 个答案:

答案 0 :(得分:2)

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

考虑以下示例:

    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):是的,它仍然适用于数据扩充方法。一开始我也很困惑。原因在于,由于图像是随机生成的,因此对于每个时期,网络看到的图像都与上一个时期不同。这就是为什么数据被“扩充”的原因-扩充不是在一个时代内完成的,而是在整个训练过程中完成的。但是,我看到其他人指定了原始steps_per_epoch的2x值。

希望这会有所帮助