Press "Enter" to skip to content

轻松使用 TensorFlow 进行数据增强

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

当我们没有大量不同的训练数据时,我们该怎幺办?这是在TensorFlow中使用数据增强在模型训练期间执行内存中图像转换以帮助克服此数据障碍的快速介绍。

 

 

图像分类的成功至少在很大程度上受到大量可用训练数据的驱动。暂时不考虑过拟合之类的问题,训练的图像数据越多,建立有效模型的机会就越大。

 

但是,如果我们没有大量的培训数据,我们该怎幺办?立即想到一些针对此特定问题的广泛方法,尤其是迁移学习和数据增强功能。

 

迁移学习是将现有机器学习模型应用于最初并非预期的场景的过程。这种利用可以节省训练时间并扩展现有机器学习模型的实用性,这些模型可能具有可用的数据和计算,并且已经在非常大的数据集上进行了很长时间的训练。如果我们在大量数据上训练模型,则可以优化结果以对少量数据有效。

 

数据扩充是现有训练数据集的大小和多样性的增加,而无需手动收集任何新数据。通过对现有数据执行一系列预处理转换,可以获取此增强数据,对于图像数据,这些转换可以包括水平和垂直翻转,倾斜,修剪,旋转等。总而言之,与仅复制相同的数据相反,这种扩充的数据能够模拟各种细微不同的数据点。这些“附加”图像的细微差别应该足以帮助训练更鲁棒的模型。同样,这就是想法。

 

本文的重点是在TensorFlow中第二种方法的实际实施,以减轻少量图像训练数据(数据增强)的问题,而稍后将对转移学习进行类似的实际处理。

 

​图像增强如何帮助

 

当卷积神经网络学习图像特征时,我们希望确保这些特征以各种方向出现,以便使经过训练的模型能够识别出人的双腿可以同时出现在图像的垂直和水平方向。除了增加数据点的原始数量之外,增强功能在这种情况下还可以通过采用诸如图像旋转的变换来帮助我们。作为另一个示例,我们还可以使用水平翻转来帮助模型训练识别猫是直立的猫还是被倒置拍照的猫。

 

数据增强不是万能药;我们不希望它能解决我们所有的小数据问题,但是它可以在许多情况下有效,并且可以通过将其作为一种全面的模型训练方法的一部分,或者与另一种数据集扩展技术(例如,转移学习)

 

TensorFlow中的图像增强

 

在TensorFlow中,使用 ImageDataGenerator 类完成数据扩充。它非常易于理解和使用。整个数据集在每个时期循环,并且数据集中的图像根据选择的选项和值进行转换。这些转换是在内存中执行的,因此不需要其他存储(尽管 save_to_dir 如果需要,该参数可用于将增强的图像保存到磁盘)。

 

如果您正在使用TensorFlow,则可能已经使用了 ImageDataGenerator 简单的方法来缩放现有图像,而没有进行任何其他扩充。可能看起来像这样:

 

 

ImageDataGenerator 执行增强的更新可能如下所示:

 

 

这是什幺意思呢?

 

**rotation_range**
**width_shift_range**
**height_shift_range**
**shear_range**
**zoom_range**
**horizontal_flip**
**vertical_flip**
**fill_mode**

 

然后,您可以使用该 ImageDataGenerator flow_from_directory 选项指定训练数据的位置(以及选择是否进行验证,如果要创建验证生成器),例如,使用选项,然后使用 fit_generator 在训练过程中流向您网络的这些增强图像来训练模型。此类代码的示例如下所示:

 

 

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注