Keras训练神经网络时损失值与学习率成正比问题咨询
你的理解是正确的,正常训练场景下只有损失的下降幅度和学习率正相关,损失值本身不会和学习率成正比,你遇到的现象和Keras的损失函数计算逻辑无关,核心原因是遗漏了MNIST输入数据的归一化预处理。
- 你当前使用的MNIST原始像素值范围是0255,没有经过缩放到01区间的预处理,大尺度的输入特征会导致Dense层输出的logits数值整体偏高,经过sigmoid激活后大部分值落入饱和区间,此时计算的分类交叉熵损失本身就会处于非常高的量级。
- 学习率决定了每次迭代权重的更新步长,在输入特征尺度未对齐的情况下,更大的学习率会让权重更新幅度更大,直接导致输出logits的波动幅度同步变大,最终表现为损失值整体量级和学习率正相关。
- 你可以做简单验证:在训练前添加两行代码对输入做归一化:
x_train = x_train.astype("float32") / 255.0 x_test = x_test.astype("float32") / 255.0
重新训练后你会发现损失数值会降到个位数区间,也不会再出现学习率扩大3倍、损失整体也扩大3倍的现象。
- 更换优化器仍然复现问题也验证了这一点:优化器仅调整权重更新的策略,只要输入特征尺度未归一化的问题存在,大学习率带来的大更新步长都会导致损失量级同步上升。
内容的提问来源于stack exchange,提问作者Moaz Ashraf
相关产品推荐
相关产品推荐

