深度学习:keras 的小型数据集:局部最小值

Deep Learning: small dataset with keras : local minima

对于我的论文,我是 运行 一个用于序列到序列翻译用例的 4 层深度网络 150 x Conv(64,5) x GRU (100) x 最后阶段的 softmax 激活,loss='categorical_crossentropy'.

训练损失和准确性收敛得非常快 其中验证损失和准确性似乎停留在 val_acc 97 到 98.2 的范围内,无法超越该范围。

我的模型是否过度拟合?

已尝试层间 0.2 的 dropout。

Output after drop-out
    Epoch 85/250
    [==============================] - 3s - loss: 0.0057 - acc: 0.9996 - val_loss: 0.2249 - val_acc: 0.9774
    Epoch 86/250
    [==============================] - 3s - loss: 0.0043 - acc: 0.9987 - val_loss: 0.2063 - val_acc: 0.9774
    Epoch 87/250
    [==============================] - 3s - loss: 0.0039 - acc: 0.9987 - val_loss: 0.2180 - val_acc: 0.9809
    Epoch 88/250
    [==============================] - 3s - loss: 0.0075 - acc: 0.9978 - val_loss: 0.2272 - val_acc: 0.9774
    Epoch 89/250
    [==============================] - 3s - loss: 0.0078 - acc: 0.9974 - val_loss: 0.2265 - val_acc: 0.9774
    Epoch 90/250
    [==============================] - 3s - loss: 0.0027 - acc: 0.9996 - val_loss: 0.2212 - val_acc: 0.9809
    Epoch 91/250
    [==============================] - 3s - loss: 3.2185e-04 - acc: 1.0000 - val_loss: 0.2190 - val_acc: 0.9809
    Epoch 92/250
    [==============================] - 3s - loss: 0.0020 - acc: 0.9991 - val_loss: 0.2239 - val_acc: 0.9792
    Epoch 93/250
    [==============================] - 3s - loss: 0.0047 - acc: 0.9987 - val_loss: 0.2163 - val_acc: 0.9809
    Epoch 94/250
    [==============================] - 3s - loss: 2.1863e-04 - acc: 1.0000 - val_loss: 0.2190 - val_acc: 0.9809
    Epoch 95/250
    [==============================] - 3s - loss: 0.0011 - acc: 0.9996 - val_loss: 0.2190 - val_acc: 0.9809
    Epoch 96/250
    [==============================] - 3s - loss: 0.0040 - acc: 0.9987 - val_loss: 0.2289 - val_acc: 0.9792
    Epoch 97/250
    [==============================] - 3s - loss: 2.9621e-04 - acc: 1.0000 - val_loss: 0.2360 - val_acc: 0.9792
    Epoch 98/250
    [==============================] - 3s - loss: 4.3776e-04 - acc: 1.0000 - val_loss: 0.2437 - val_acc: 0.9774

不,这不是过度拟合。过度拟合仅在训练损失较低且验证损失较高时发生。这也可以看作是训练和验证准确性之间的巨大差异(在分类的情况下)。

您介绍的案例非常复杂。为了回答您的问题,您的情况是否确实发生了过度拟合,您需要回答两个问题:

  1. 在验证集上获得的结果是否令人满意?- 验证集的主要目的是让您了解新数据到达时会发生什么。如果您对验证集的准确性感到满意,那么您应该考虑您的模型没有过度拟合。
  2. 我应该担心你的模型在训练集上的极高准确率吗?- 你可能很容易注意到你的模型在训练集上几乎是完美的。这可能意味着它记住了一些模式。通常 - 你的数据中总是有一些噪音 - 并且你的模型 属性 在数据上是完美的 - 意味着它可能使用其部分能力来学习偏见。为了测试我通常更喜欢测试得分最低的正样本或得分最高的负样本——因为离群值通常在这两组中(模型正在努力将它们推高/低于 0.5 阈值)。

所以 - 在检查了这两个问题之后,如果您的模型过度拟合,您可能会得到答案。您呈现的行为非常好 - 背后的实际原因可能是验证集中很少有模式未在训练集中正确涵盖。但这是您在设计机器学习解决方案时应始终考虑的问题。