TensorFlow 中怎么实现数据增强操作
这篇文章给大家介绍 TensorFlow 中怎么实现数据增强操作,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
数据扩充是现有训练数据集的大小和多样性的增加,而无需手动收集任何新数据。通过对现有数据执行一系列预处理转换,可以获取此增强数据,对于图像数据,这些转换可以包括水平和垂直翻转,倾斜,修剪,旋转等。总而言之,与仅复制相同的数据相反,这种扩充的数据能够模拟各种细微不同的数据点。这些“附加”图像的细微差别应该足以帮助训练更鲁棒的模型。同样,这就是想法。
本文的重点是在TensorFlow中第二种方法的实际实施,以减轻少量图像训练数据(数据增强)的问题,而稍后将对转移学习进行类似的实际处理。
图像增强如何帮助
当卷积神经网络学习图像特征时,我们希望确保这些特征以各种方向出现,以便使经过训练的模型能够识别出人的双腿可以同时出现在图像的垂直和水平方向。除了增加数据点的原始数量之外,增强功能在这种情况下还可以通过采用诸如图像旋转的变换来帮助我们。作为另一个示例,我们还可以使用水平翻转来帮助模型训练识别猫是直立的猫还是被倒置拍照的猫。
数据增强不是万能药;我们不希望它能解决我们所有的小数据问题,但是它可以在许多情况下有效,并且可以通过将其作为一种全面的模型训练方法的一部分,或者与另一种数据集扩展技术(例如,转移学习)
TensorFlow中的图像增强
在TensorFlow中,使用ImageDataGenerator类完成数据扩充。它非常易于理解和使用。整个数据集在每个时期循环,并且数据集中的图像根据选择的选项和值进行转换。这些转换是在内存中执行的,因此不需要其他存储(尽管save_to_dir
如果需要,该参数可用于将增强的图像保存到磁盘)。
如果您正在使用TensorFlow,则可能已经使用了ImageDataGenerator
简单的方法来缩放现有图像,而没有进行任何其他扩充。可能看起来像这样:
ImageDataGenerator
执行增强的更新可能如下所示:
这是什么意思呢?
rotation_range
-随机旋转的度数范围;在上述示例中为20度width_shift_range
-总宽度的一部分(如果值<1,在这种情况下),以随机地水平转换图像;上例中为0.2height_shift_range
-总高度的一部分(如果值<1,在这种情况下),以垂直方向随机平移图像;上例中为0.2shear_range
-逆时针方向的剪切角,以度为单位,用于剪切转换;上例中为0.2zoom_range
-随机缩放范围;上例中为0.2horizontal_flip
-用于水平随机翻转图像的布尔值;在上面的例子中为真vertical_flip
-布尔值,用于垂直随机翻转图像;在上面的例子中为真fill_mode
-根据“常数”,“最近”,“反射”或“环绕”填充输入边界之外的点;在以上示例中最接近
然后,您可以使用该ImageDataGenerator
flow_from_directory
选项指定训练数据的位置(以及选择是否进行验证,如果要创建验证生成器),例如,使用选项,然后使用fit_generator
在训练过程中流向您网络的这些增强图像来训练模型。此类代码的示例如下所示:
关于 TensorFlow 中怎么实现数据增强操作就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。