1.官方介绍

  torch.optim.lr_scheduler.MultiStepLR表示按需求有外部设置调整学习率。具体参数如下:

  • o p t i m i z e r ( O p t i m i z e r ) optimizer(Optimizer) optimizer(Optimizer):优化器
  • m i l e s t o n e s ( l i s t ) milestones(list) milestones(list) l r lr lr改变时的epoch数目
  • g a m m a ( f l o a t ) gamma(float) gamma(float):学习率调整倍数,默认为 0.1 0.1 0.1,即下降 10 10 10
  • l a s t _ e p o c h ( l i s t ) last\_epoch(list) last_epoch(list):从last_start开始后记录了多少个 e p o c h epoch epoch,默认为 − 1 -1 1

2.代码实例

  假定优化器使用的学习率为 l r = 0.06 lr = 0.06 lr=0.06,在第40轮时候变成 l r = 0.006 lr=0.006 lr=0.006,在第 100 100 100轮的时候变成 l r = 0.0006 lr=0.0006 lr=0.0006,具体的代码实例如下所示:

>>> scheduler = MultiStepLR(optimizer, milestones=[40,100], gamma=0.1)
>>> for epoch in range(100):
>>>     train(...)
>>>     validate(...)
>>>     scheduler.step()

  在指定的 e p o c h epoch epoch值,如 [ 5 , 20 , 25 , 80 ] [5,20,25,80] [5,20,25,80]处对学习率进行衰减完整的代码展示如下所示:

model = AlexNet(num_classes=2)
optimizer = optim.SGD(params = model.parameters(), lr=0.01)
scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[5,20,25,80], gamma=0.1)

plt.figure()
x = list(range(100))
y = []

for epoch in range(100):
    scheduler.step()
    lr = scheduler.get_lr()
    print(epoch, scheduler.get_lr()[0])
    y.append(scheduler.get_lr()[0])
plt.xlabel("epoch")
plt.ylabel("learning rate")
plt.plot(x,y)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐