machine-learning - CNN SGD损失从较小值跃升至较大值

标签 machine-learning conv-neural-network gradient backpropagation loss-function

我正在训练LeNet5风格的CNN,损失无法减少。相反,我得到了一张奇怪的图片:首先,在线SGD的成本下降了一点。然后它不断地从几乎零跳到8-9。有人从这张图中对潜在原因有任何直觉吗?

enter image description here

最佳答案

我相信您尝试了不同的优化程序,但请尝试使用初始学习率较低的原始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/

相关文章:

css - 无法在 Safari 中相对于底部定位 CSS 渐变

python - 使用大型 (+15 gb) CSV 数据集和 Pandas/XGBoost

python - 在标准 CNN 上应用批量归一化的位置

R-Caret:如何使用多个模型构建更高效的模型并预测新结果

machine-learning - 如何确保 Pytorch 中的所有内容都自动在 GPU 上运行?

tensorflow - 卷积神经网络输出所有标签的相同概率

python - 从 keras 模型中提取特征到数据集中

python-3.x - 在 tensorflow 中计算梯度返回什么

python - 使用 Flask 将机器学习模型部署为 REST API。错误 : RuntimeError: Working outside of request context

C# LinearGradientBrush 位图垂直重复