You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制learning rate与Loss的关系图以选取最优学习率

学习率-Loss关系可视化及最优学习率查找实现方案

1. 提取训练过程的对应数据

你定义的全局列表l_rates已经存储了每轮训练对应的学习率,model.fit()返回的历史对象中存储了每轮的训练损失,直接提取即可:

import matplotlib.pyplot as plt
import numpy as np

# 提取损失序列与对应学习率序列
loss_list = learning_rate_history.history['loss']
lr_list = l_rates

2. 绘制学习率-损失关系图

由于学习率是指数级增长的,使用对数X轴能更清晰展示拐点位置:

plt.figure(figsize=(10, 6))
# 对数X轴适配指数变化的学习率
plt.semilogx(lr_list, loss_list)
plt.xlabel('学习率(对数刻度)')
plt.ylabel('损失值Loss')
plt.title('学习率与损失对应关系')
plt.grid(True)
plt.show()

绘制完成后肉眼即可定位损失从下降转为上升的拐点,对应X轴数值就是候选最优学习率。

3. 自动计算拐点最优学习率

如果需要代码自动定位拐点,可通过计算损失的梯度找到损失由降转升的位置:

# 计算损失序列的梯度
loss_gradient = np.gradient(loss_list)
# 找到梯度首次转正的位置(损失首次从下降转为上升)
inflection_point_index = np.argmax(loss_gradient > 0)
best_lr = lr_list[inflection_point_index]
print(f"拐点对应的最优学习率为:{best_lr}")

实际训练时建议取该最优学习率的1/10作为正式训练的初始学习率,泛化稳定性更好。

注意事项

  • 如果训练数据噪声大导致损失曲线波动明显,可先对损失序列做滑动平均后再计算拐点,避免误判
  • 你当前的学习率调度器逻辑符合学习率范围测试的需求,无需调整,500轮训练刚好将学习率放大1e6倍,覆盖了常规的学习率搜索区间

内容的提问来源于stack exchange,提问作者Adarsh Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:51:03