如何知道是否发生欠装或过度装配?

stu*_*t17 -1 python machine-learning keras tensorflow

我正在尝试用两个类进行图像分类.我有1000张平衡类的图像.当我训练模型时,我得到的恒定验证精度低,但验证损失减少.这是过度拟合还是过度拟合的迹象?我还应该注意到,我正在尝试使用新类和不同的数据集重新训练Inception V3模型.

Epoch 1/10
2/2 [==============================]2/2 [==============================] - 126s 63s/step - loss: 0.7212 - acc: 0.5312 - val_loss: 0.7981 - val_acc: 0.3889

Epoch 2/10
2/2 [==============================]2/2 [==============================] - 70s 35s/step - loss: 0.6681 - acc: 0.5959 - val_loss: 0.7751 - val_acc: 0.3889

Epoch 3/10
2/2 [==============================]2/2 [==============================] - 71s 35s/step - loss: 0.7313 - acc: 0.4165 - val_loss: 0.7535 - val_acc: 0.3889

Epoch 4/10
2/2 [==============================]2/2 [==============================] - 67s 34s/step - loss: 0.6254 - acc: 0.6603 - val_loss: 0.7459 - val_acc: 0.3889

Epoch 5/10
2/2 [==============================]2/2 [==============================] -  68s 34s/step - loss: 0.6717 - acc: 0.5959 - val_loss: 0.7359 - val_acc: 0.3889

Epoch 6/10
2/2 [==============================]2/2 [==============================] - 107s 53s/step - loss: 0.6633 - acc: 0.5938 - val_loss: 0.7259 - val_acc: 0.3889

Epoch 7/10
2/2 [==============================]2/2 [==============================] - 67s 33s/step - loss: 0.6674 - acc: 0.6411 - val_loss: 0.7160 - val_acc: 0.3889

Epoch 8/10
2/2 [==============================]2/2 [==============================] - 105s 53s/step - loss: 0.6296 - acc: 0.6562 - val_loss: 0.7099 - val_acc: 0.3889

Epoch 9/10
2/2 [==============================]2/2 [==============================] - 67s 34s/step - loss: 0.5717 - acc: 0.8273 - val_loss: 0.7064 - val_acc: 0.4444

Epoch 10/10
2/2 [==============================]2/2 [==============================] - 103s 52s/step - loss: 0.6276 - acc: 0.6875 - val_loss: 0.7035 - val_acc: 0.4444
Run Code Online (Sandbox Code Playgroud)

en_*_*ght 6

什么是过度拟合

当模型对训练数据过于具体(或不够具体)时,会发生过度拟合(或欠拟合),并且不能很好地推断到真实域.我只是说从现在开始过度拟合以保存我可怜的打字手指[*]

我认为维基百科的形象很好:

维基百科过度拟合曲线

显然,绿线,一个试图将红色等级与蓝色分开的决定边界,是"过度拟合",因为虽然它在训练数据上表现良好,但它缺乏我们在推广时看到的" 正规化 "形式[**].

过度拟合/ 交叉验证的这些CMU幻灯片也可以解决问题:

在此输入图像描述

这里有一些更直观的好措施


一般情况下,何时发生过度拟合?

当测试误差不反映训练误差时,以数字方式观察过度拟合

显然,测试误差将始终(预期)比训练误差更差,但在一定次数的迭代中,测试中的损失将开始增加,即使训练中的损失继续下降.


如何判断模型在视觉上是否过度配合?

当维度允许时,可以通过绘制决策边界(如上面的维基百科图片中)来观察过度拟合,或者通过查看在拟合过程中除了训练损失之外的测试损失

你没有给我们足够的积分来制作这些图表,但这里有一个例子(来自某人提出类似的问题),显示这些损失图表的样子: 过度损失曲线

虽然损失曲线有时更漂亮且更具时间性,但请注意这里的趋势,即训练误差仍在减少,但测试误差正在上升.这是过度拟合的一个大红旗.这里讨论损耗曲线

更简洁,更真实的例子来自CMU关于过度使用ANN的讲座:

超越第二个例子

如上所述,顶部图形过度拟合.底部图表不是.


这是什么时候发生的?

当模型具有太多参数时,它易于过度拟合(如n度多项式到n-1个点).同样,参数不足的模型也可以是不合适的.

某些正规化技术,如丢失或批量归一化,或传统的l-1正规化,可以解决这个问题.我相信这超出了你的问题的范围.

进一步阅读:

  1. 一个很好的统计数据 - 问题和答案
  2. 密集读数:与某些模型过度拟合的界限
  3. 打火机阅读:概述
  4. 相关的偏差 - 方差权衡

脚注

[*]没有理由继续写"过度拟合/欠拟合",因为两者的推理是相同的,但指标被翻转,显然(决策边界没有足够地锁定到真正的边界,而不是紧紧包裹着各个点).通常,过度拟合是更常见的避免,因为"更多迭代/更多参数"是当前主题.如果你有很多数据而不是很多参数,也许你真的担心不合适,但我对此表示怀疑.

[**]在维基百科的第一张图片中形式化黑线优于绿线的想法的一种方法是在模型选择期间惩罚模型所需的参数数量