当前位置: 首页 > news >正文

PyTorch 学习率调度器(LR Scheduler)

文章目录

  • PyTorch 学习率调度器(LR Scheduler)
    • 1. 一句话定义
    • 2. 通用使用套路
    • 3. 内置调度器对比速览
    • 4. 各调度器最小模板
      • ① LambdaLR(线性 warmup)
      • ② StepLR
      • ③ MultiStepLR
      • ④ CosineAnnealingLR
      • ⑤ ReduceLROnPlateau(必须传指标)
    • 5. 常用调试 API
    • 6. 易踩坑 Top-3
    • 7. 速记口诀

PyTorch 学习率调度器(LR Scheduler)


1. 一句话定义

每过一段时间 / 满足某条件,自动按规则修改优化器学习率的工具。


2. 通用使用套路

optimizer = torch.optim.Adam(model.parameters(), lr=初始LR)
scheduler = XXXLR(optimizer, ...)   # 选下面任意一种
for epoch in range(EPOCH):train(...)val_loss = validate(...)optimizer.step()                # ① 先更新参数scheduler.step(val_loss)        # ② 再调度LR(ReduceLROnPlateau需传loss)

顺序:先 optimizer.step() → 再 scheduler.step(),否则报警告。


3. 内置调度器对比速览

调度器触发规则主要参数参数解释典型场景
LambdaLR自定义函数 f(epoch) 返回乘数lr_lambda, last_epochlr_lambda: 接收 epoch,返回 LR 乘数;last_epoch: 重启训练时设为上次 epochwarmup、分段线性
StepLR固定每 step_size epoch 降一次step_size, gamma, last_epochstep_size: 隔多少 epoch 降;gamma: 乘性衰减系数常规“等间隔”下降
MultiStepLR指定里程碑 epoch 列表降milestones, gamma, last_epochmilestones: List,到这些 epoch 就 ×gamma训练中期多段下降
CosineAnnealingLR余弦曲线从初始→η_minT_max, eta_min, last_epochT_max: 半个余弦周期长度;eta_min: 最小 LR退火、cosine 重启
ReduceLROnPlateau监控指标停止改善时降mode, factor, patience, threshold, cooldown, min_lr见下方详注验证 loss/acc 卡住时

ReduceLROnPlateau 参数详注

  • mode='min''max':指标越小/越大越好
  • factor=0.1:新 LR = 旧 LR × factor
  • patience=3:连续 3 次 epoch 无改善才降
  • threshold=0.01:改善幅度小于阈值视为无改善
  • cooldown=1:降 LR 后冻结监控的 epoch 数
  • min_lr=1e-6:下限,降到此值不再降

4. 各调度器最小模板

① LambdaLR(线性 warmup)

scheduler = LambdaLR(optimizer, lr_lambda=lambda epoch: epoch / 5 if epoch < 5 else 1)

② StepLR

scheduler = StepLR(optimizer, step_size=2, gamma=0.1)   # 每 2 epoch ×0.1

③ MultiStepLR

scheduler = MultiStepLR(optimizer, milestones=[2, 6], gamma=0.1)

④ CosineAnnealingLR

scheduler = CosineAnnealingLR(optimizer, T_max=10, eta_min=1e-6)

⑤ ReduceLROnPlateau(必须传指标)

scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=3,threshold=0.01, cooldown=1, min_lr=1e-6)
val_loss = validate(...)
scheduler.step(val_loss)          # ← 记得传指标

5. 常用调试 API

scheduler.get_last_lr()   # 当前实际 LR 列表(每个 param_group)
scheduler.last_epoch      # 已完成的 epoch 计数(从 0 开始)

6. 易踩坑 Top-3

  1. optimizer.step()scheduler.step()
    否则报警告 “Detected call of lr_scheduler.step() before optimizer.step()”。
  2. ReduceLROnPlateau 必须传监控值
    不传 → RuntimeError。
  3. Lambda/MultiStep 等无需监控值,传了 → TypeError。

7. 速记口诀

“优化先迈步,调度再跟进;Plateau 传 loss,其余不用问。”

http://www.xdnf.cn/news/1454059.html

相关文章:

  • HTB Sau
  • MySQL数据库和SQL语言
  • 具身智能多模态感知与场景理解:多模态3D场景理解
  • Linux基础知识(一)
  • AGX Orin平台RTC驱动导致reboot系统卡住问题调试
  • 微信小程序-day4
  • 微信小程序日历事件添加实现
  • IO_HW_9_4
  • 基于飞算JavaAI的学生成绩综合统计分析系统
  • Android Zygote 源码剖析
  • webpack scope hositing 和tree shaking
  • 谷歌修复安卓120个漏洞,含两个正遭利用的零日漏洞
  • 一文吃透 C#中异步编程Task
  • 鸿蒙权限崩溃:网络文件访问全攻略
  • CentOS系统如何查看当前内存容量
  • android View详解—View的刷新流程源码解析
  • 惊!printf 不往屏幕输?都是 fd 在搞鬼!爆肝拆解 Linux 文件描述符 + 重定向底层,学会直接在终端横着走
  • STM32-UART-中断
  • Qt QJsonObject
  • 数据库集成:使用 SQLite 与 Electron
  • uni 拍照上传拍视频上传以及相册
  • jenkins调用ansible部署lnmp平台-Discuz论坛
  • Java 流程控制:从入门到面试的全方位指南
  • C语言(长期更新)第14讲:指针详解(四)
  • 【图像处理基石】如何在频域对图像进行处理和增强?
  • VSCode中的扩展Extension说明
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(2)
  • 深度学习:ResNet 残差神经网络详解
  • C++ 面试高频考点 力扣 153. 寻找旋转排序数组中的最小值 二分查找 题解 每日一题
  • 2025年GEO优化供应商盘点:五大实力派助您抢占AI搜索先机