我正在训练LeNet5风格的CNN,损失无法减少。相反,我得到了一张奇怪的图片:首先,在线SGD的成本下降了一点。然后它不断地从几乎零跳到8-9。有人从这张图中对潜在原因有任何直觉吗?
最佳答案
我相信您尝试了不同的优化程序,但请尝试使用初始学习率较低的原始SGD。
最有可能的是,优化器从一开始就获得了很高的动力,并继续沿着错误的方向前进。
model.compile(loss='categorical_crossentropy', optimizer='SGD', metrics=['accuracy'])
看,使用原始SGD时,您会选择损失函数w.r.t的梯度。参数(增加功能值的方向)并向相反方向一点点(以使损失函数最小化)。
在SGD之上构建了不同的优化器,它们使用了一些想法(动量,学习率衰减等)来使收敛更快。
如果您看一下动量是如何工作的,就会明白问题出在哪里。一开始,优化器可能会在相同的方向(很不错)上运行很长时间,这会导致很大的动力。然后,梯度的相反方向可能与动量不匹配,从而导致优化器“爬山”(获得更高的损耗值)有时会出现,但最终可能会解决问题。
(我鼓励您看看动力是如何工作的)
https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum
关于machine-learning - CNN SGD损失从较小值跃升至较大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60036583/