1. 学习率调整的基类
-
类名:
_LRScheduler
-
主要属性:
- optimizer: 关联的优化器
- last_epoch: 记录epoch数
- base_lrs: 记录初始学习率
-
主要方法:
step()
:更新下一个epoch的学习率get_lr()
: 抽象函数,计算下一个epoch的学习率
2. PyTorch中的学习率策略
2.1 torch.optim.lr_scheduler.StepLR
- 功能:等间隔调整学习率
- 主要参数:
- step_size: 调整间隔数,多少步之后开始调整学习率
- gamma: 调整系数
- 调整方式: l r = l r × g a m m a lr=lr \times gamma lr=lr×gamma
2.2 torch.optim.lr_scheduler.MultiStepLR
- 功能:按给定时间间隔调整学习率
- 主要参数:
- milestones: 设定调整时刻数
- gamma: 调整系数
- 调整方式: l r = l r × g a m m a lr=lr \times gamma lr=lr×gamma
2.3 torch.optim.lr_scheduler.ExponentialLR
- 功能: 按指数衰减调整学习率
- 主要参数:
- gamma: 指数的底
- 调整方式: l r = l r × g a m m a e p o c h lr = lr \times gamma^{\large epoch} lr=lr×gammaepoch
2.4 torch.optim.lr_scheduler.ConsineAnnealingLR
-
功能: 余弦周期调整学习率
-
主要参数:
- T_max: 下降周期
- eta_min: 学习率下限
-
调整方式:
η t = η m i n + 1 2 ( η m a x − η m i n ) ( 1 + cos ( T c u r T m a x π ) ) \displaystyle\large\eta_{t}=\eta_{min}+\frac{1}{2}\Big(\eta_{max}-\eta_{min}\Big)\Big(1+\cos(\frac{T_{cur}}{T_{max}}\pi)\Big) ηt=ηmin+21(ηmax−ηmin)(1+cos(TmaxTcurπ))
2.5 torch.optim.lr_scheduler.ReduceLRonPlateau
- 功能: 监控指标,当指标不再变化则调整
- 主要参数:
- mode: min/max两种模式
- factor: 调整系数
- patience: “耐心”, 接收几次不变化
- cooldown: “冷却时间”,停止监控一段时间,单位是epoch
- verbose: 是否打印日志
- min_lr: 学习率下限
- eps: 学习率衰减最小值
2.6 torch.optim.lr_scheduler.LambdaLR
- 功能:自定义调整策略
- 主要参数:
- lr_lambda: function or list,如果是list,其元素也得是function
- 如何自定义:
- 自定义的函数要返回一个系数,与之前的学习率相乘