我训练ResNet(CIFAR-10数据集)并且训练准确性大多数(在95%的时期内)增加,但有时它下降5-10%然后再次开始增加。
以下是一个例子:
Epoch 45/100
40000/40000 [==============================] - 50s 1ms/step - loss: 0.0323 - acc: 0.9948 - val_loss: 1.6562 - val_acc: 0.7404
Epoch 46/100
40000/40000 [==============================] - 52s 1ms/step - loss: 0.0371 - acc: 0.9932 - val_loss: 1.6526 - val_acc: 0.7448
Epoch 47/100
40000/40000 [==============================] - 50s 1ms/step - loss: 0.0266 - acc: 0.9955 - val_loss: 1.6925 - val_acc: 0.7426
Epoch 48/100
40000/40000 [==============================] - 50s 1ms/step - loss: 0.0353 - acc: 0.9940 - val_loss: 2.2682 - val_acc: 0.6496
Epoch 49/100
40000/40000 [==============================] - 50s 1ms/step - loss: 1.6391 - acc: 0.4862 - val_loss: 1.2524 - val_acc: 0.5659
Epoch 50/100
40000/40000 [==============================] - 52s 1ms/step - loss: 0.9220 - acc: 0.6830 - val_loss: 0.9726 - val_acc: 0.6738
Epoch 51/100
40000/40000 [==============================] - 51s 1ms/step - loss: 0.5453 - acc: 0.8165 - val_loss: 1.0232 - val_acc: 0.6963
我在此之后退出执行,但这是我的第二次运行,首先,同样的事情发生了一段时间后又回到了99%。
批量是128所以我想这不是问题。我没有改变学习率或任何其他亚当参数,但我想这也不是问题,因为准确性在大多数时间都在增加。
那么,为什么会发生这些突然下降?
答案 0 :(得分:4)
由于训练和验证的损失和准确性都会增加,看起来您的优化算法暂时超出了它试图遵循的损失函数的下坡部分。
记住梯度下降和相关方法计算某个点的渐变,然后使用它(有时是一些额外的数据)来猜测移动的方向和距离。这并不总是完美的,有时它会走得太远,最终会再次上坡。
如果你的学习率很高,你会不时地看到这一点,但你可能仍然会比学习率更低的时候收敛得更快。你可以尝试不同的学习率,但除非你的损失开始分歧,否则我不会担心。