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

问题描述:

对于我的论文,我运行了一个4层深度网络,用于序列转换用例 150 x Conv(64,5)x GRU(100)x softmax在loss ='categorical_crossentropy'的最后一个阶段激活。深度学习:包含keras的小数据集:局部最小值

训练损失和准确性最优化地相当快地收敛 其中验证损失和准确性似乎卡在val_acc 97至98.2范围内,无法超越此范围。

我的模型是否过拟合?

尝试在图层之间丢失0.2。

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阈值)。

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

+0

花费时间检查模型上的不同排列。你对网络使用部分学习能力的观察是正确的。尝试了各种模型容量减少百分比来验证。在较低的能力下,培训acc和验证准确性同时进行。您对具有独特模式的验证集的第二次观察也是如此,需要花时间手动验证两个数据集 – Ajay

不,这不是过度配合。过度训练只发生在训练损失低,验证损失高的情况下。这也可以被看作是训练和验证准确度之间的高度差异(在分类的情况下)。

+0

我们可以使用什么参数来检查顺序到顺序用例中的过度拟合? – Ajay