机器学习中是否真的需要数据扩充

Kar*_*hik 3 machine-learning conv-neural-network tensorflow

我有兴趣了解数据扩充(在各种角度旋转,翻转图像)的重要性,同时为机器学习问题提供数据集。

是否真的需要?还是使用CNN网络也将处理此问题,无论数据转换有多大不同?

所以我进行了2个班级的分类任务来得出一些结论

  1. 箭头形状
  2. 圆形形状

这个想法是只训练一个方向的形状(我用箭头指向右边),然后用另一个方向(我的箭头用向下箭头)检查模型,而这个方向在训练阶段根本没有给出。

培训中使用的一些样本

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

测试中使用的一些样本

在此处输入图片说明 在此处输入图片说明

这是我用来创建张量流模型的整个数据集。 https://bitbucket.org/akhileshmalviya/samples/src/bab50b85d826?at=master

我想知道我得到的结果,

(i)除少数向下箭头外,其他所有箭头均已正确预测为箭头。这是否意味着完全不需要数据扩充?

(ii)还是我用来理解数据增强的重要性的正确用例?

请分享您的想法,我们将不胜感激!

nes*_*uno 5

数据扩充是一个依赖数据的过程。

通常,当您的训练数据很复杂并且有几个样本时,您将需要它。

神经网络可以轻松学习如何提取简单的模式,例如弧形或直线形,这些模式足以对您的数据进行分类。

在您的情况下,数据增强几乎无济于事,网络将学习提取的功能很简单,并且彼此之间有很大不同。

相反,当您不得不处理复杂的结构(猫,狗,飞机等)时,您就不能依赖简单的特征(如边缘,弧线等)。相反,您必须向网络展示实例您试图对分类进行很大的分类,并且对于同一主题,提取出的特征可以通过许多不同的方式进行组合。

考虑一下猫:它可以是任何颜色,可以在不同的光照条件下拍摄照片,可以在任何位置拍摄其整个身体,可以以特定的方向拍摄照片。要正确地对如此不同的实例进行分类,网络必须学会提取强大的功能,这些功能只有在看到许多不同的输入后才能学习。

相反,在您的情况下,简单的功能可以完全区分您的输入,因此,任何形式的数据扩充都可以提供一点帮助。

  • 只需认为CNN学会提取* local *功能即可。CNN本身不了解任何有关箭头方向的信息,也不了解有关整个输入的信息。卷积滤波器特别是在第一层中,只是学习提取它们在“ 3x3”区域(或任何滤波器大小)中看到的内容。因此,如果第一层学习提取边缘,则第二层学习将它们组合成直线和圆弧(例如)。最后一层将线分类为箭头,将圆弧分类为圆。@Karthik我猜想,如果您降低类间的可变性,问题将会更加棘手。尝试! (2认同)