轻松使用 TensorFlow 进行数据加强

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

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

可是,若是咱们没有大量的培训数据,咱们该怎么办?当即想到一些针对此特定问题的普遍方法,尤为是迁移学习和数据加强功能。微信

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

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

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

​图像加强如何帮助

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

数据加强不是万能药;咱们不但愿它能解决咱们全部的小数据问题,可是它能够在许多状况下有效,而且能够经过将其做为一种全面的模型训练方法的一部分,或者与另外一种数据集扩展技术(例如,转移学习)spa

TensorFlow中的图像加强

在TensorFlow中,使用ImageDataGenerator类完成数据扩充。它很是易于理解和使用。整个数据集在每一个时期循环,而且数据集中的图像根据选择的选项和值进行转换。这些转换是在内存中执行的,所以不须要其余存储(尽管save_to_dir若是须要,该参数可用于将加强的图像保存到磁盘)。code

若是您正在使用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”,点击下方菜单便可获取网盘连接。

相关文章
相关标签/搜索