计算机与AI · 2020年11月04日

轻松使用 TensorFlow 进行数据增强

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





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

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

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

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

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



图像增强如何帮助

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

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



TensorFlow中的图像增强

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

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





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





这是什么意思呢?

  • **rotation\_range**-随机旋转的度数范围;在上述示例中为20度
  • **width\_shift\_range**-总宽度的一部分(如果值<1,在这种情况下),以随机地水平转换图像;上例中为0.2
  • **height\_shift\_range**-总高度的一部分(如果值<1,在这种情况下),以垂直方向随机平移图像;上例中为0.2
  • **shear\_range**-逆时针方向的剪切角,以度为单位,用于剪切转换;上例中为0.2
  • **zoom\_range**-随机缩放范围;上例中为0.2
  • **horizontal\_flip**-用于水平随机翻转图像的布尔值;在上面的例子中为真
  • **vertical\_flip**-布尔值,用于垂直随机翻转图像;在上面的例子中为真
  • **fill\_mode**-根据“常数”,“最近”,“反射”或“环绕”填充输入边界之外的点;在以上示例中最接近

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





如果你喜欢本文的话,欢迎点赞转发!谢谢。

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。



推荐阅读
关注数
8
文章数
43
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息