StepLR
和 MultiStepLR
是 PyTorch 中两种常用的学习率调度器,它们的主要区别在于 学习率下降的时机和方式。
stepLR
特点
固定间隔下降:每隔固定的 epoch 数(
step_size
),学习率乘以一个固定的因子(gamma
)。简单直接:适用于学习率需要定期下降的场景。
公式
step_size
:学习率下降的 epoch 间隔。gamma
:学习率下降的因子(默认是 0.1)。
举例
假设初始学习率为 0.1,
step_size=30
,gamma=0.1
:
- Epoch 0-29:学习率 = 0.1
- Epoch 30-59:学习率 = 0.01
- Epoch 60-89:学习率 = 0.001
- ...
代码示例
import torch.optim as optim
optimizer = optim.SGD(model.parameters(), lr=0.1)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
MultiStepLR
特点
自定义下降点:在指定的 epoch 点(
milestones
),学习率乘以一个固定的因子(gamma
)。灵活性高:适用于学习率需要在多个特定阶段下降的场景。
公式
milestones
:一个列表,指定学习率下降的 epoch 点。gamma
:学习率下降的因子(默认是 0.1)。
举例
假设初始学习率为 0.1,
milestones=[30, 60, 200]
,gamma=0.1
:
- Epoch 0-29:学习率 = 0.1
- Epoch 30-59:学习率 = 0.01
- Epoch 60-199:学习率 = 0.001
- Epoch 200+:学习率 = 0.0001
代码示例
import torch.optim as optim
optimizer = optim.SGD(model.parameters(), lr=0.1)
scheduler = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[30, 60, 200], gamma=0.1)
主要区别
特性 | StepLR | MultiStepLR |
---|---|---|
下降时机 | 固定间隔(step_size ) | 自定义 epoch 点(milestones ) |
灵活性 | 较低 | 较高 |
适用场景 | 学习率需要定期下降 | 学习率需要在多个特定阶段下降 |
参数 | step_size , gamma | milestones , gamma |