11.11.3 策略

在 PyTorch 中,scheduler.get_last_lr() 返回的是一个列表(list),其中包含优化器中每个参数组(parameter group)当前的学习率。例如:

optimizer = torch.optim.SGD(
    [
        {'params': model.layer1.parameters(), 'lr': 0.1},  # 参数组 0
        {'params': model.layer2.parameters(), 'lr': 0.01}   # 参数组 1
    ],
    momentum=0.9
)

此时,scheduler.get_last_lr() 会返回 [0.1, 0.01],分别对应两个参数组的学习率。

PyTorch 的学习率调度器(如 MultiStepLR)内部维护了一个计数器(通常称为 last_epoch),用于跟踪当前的训练进度。每次调用 scheduler.step() 时,计数器会递增,并根据预设的规则(如 milestones)调整学习率。以下是详细解释:


1. 调度器内部的计数器

  • last_epoch:调度器内部维护的计数器,默认从 0 开始(对应第 1 个 epoch)。
  • 递增规则:每调用一次 scheduler.step()last_epoch 自动加 1。
  • 学习率调整逻辑:当 last_epoch 达到预设的 milestones 时,学习率会乘以 gamma(例如 0.5)。

余弦调度器的直觉就是更平滑的学习率变动和周期性地恢复学习率从而跳出局部最小值(这里书上的代码是\(t>T\)之后学习率就不变了,我们不这么做,就一直按照式\((11.86)\)去计算即可)

posted @ 2025-03-28 21:32  最爱丁珰  阅读(18)  评论(0)    收藏  举报