如何知道是否发生欠拟合或过度拟合?

时间:2018-08-24 18:14:48

标签: python tensorflow machine-learning keras

我正在尝试使用两个类对图像进行分类。我有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

1 个答案:

答案 0 :(得分:5)

什么是过度拟合

当模型对训练数据过于具体(或不够具体)而无法很好地推断出真实域时,就会发生过度拟合(或过度拟合)。从现在开始,我只是说过拟合以节省我打字不佳的手指[*]

我认为wikipedia的图片不错:

wikipedia overfitting curve

很明显,绿线decision boundary试图将红色类与蓝色分开,因为它在训练数据上效果很好,但缺少“ regularized”,这是因为“绿色” “表单,我们希望看到generalizing [**]的时间。

These CMU slides关于过度拟合/ cross validation的问题也很明确:

enter image description here

And here's some more intuition for good measure


通常何时发生过度拟合?

  

当测试误差不能反映训练误差时,会出现数值过大的拟合现象

很明显,测试误差总是(预期)比训练误差更严重,但是在一定的迭代次数下,即使训练损失继续减少,测试损失也会开始增加。


如何判断模型何时在视觉上过度拟合?

  

可以通过绘制决策边界来观察过度拟合(如   尺寸允许的情况下,或通过查看   在训练过程中除了训练损失外,还承受测试损失

您没有给我们足够的分数来制作这些图表,但是以下示例(from someone asking a similar question)显示了这些损失图表的外观: Overfit loss curves

尽管损失曲线有时更漂亮,更对数,但请注意此处的趋势,训练误差仍在减少,而测试误差却在上升。这是过度拟合的大警示。 SO discusses loss curves here

更简洁,更真实的示例来自this CMU lecture on ovefitting ANN's:

Ovefitting second example

顶部图形与以往一样过拟合。底部图不是。


何时发生?

当模型中的参数过多时,它很容易过度拟合(例如,对n-1个点的n次多项式)。同样,参数不足的模型可能会欠拟合。

Certain regularization techniques,例如辍学或批处理规范化,或者传统上以l-1正则化来解决。我相信这超出了您的问题范围。

进一步阅读:

  1. A good statistics-SO question and answers
  2. Dense reading: bounds on overfitting with some models
  3. Lighter reading: general overview
  4. The related bias-variance tradeoff

脚注

[*]没有理由继续写“过度拟合/不足拟合”,因为两者的推理都相同,但是指标显然是翻转的(决策边界尚未充分锁定在真实边界上,因为反对太紧紧地包裹在个别观点上)。通常,过度拟合是最常见的避免方法,因为“更多的迭代/更多的参数”是当前的主题。如果您有大量数据而没有很多参数,也许您真的担心拟合不足,但我对此表示怀疑。

[**]在Wikipedia的第一张图片中,将黑线比绿线更可取的想法形式化的一种方法是,在模型选择期间由模型penalize the number of parameters required