共计 1743 个字符,预计需要花费 5 分钟才能阅读完成。
当咱们没有大量不同的训练数据时,咱们该怎么办?这是在 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”,点击下方菜单即可获取网盘链接。