当前位置:   article > 正文

pytorch中的多种scheduler_pytorch 多个scheduler

pytorch 多个scheduler

pytorch中的多种scheduler

1. LambdaLR

  1. 公式
    l r e p o c h = l r i n i t i a l ∗ L a m b d a ( e p o c h ) lr_{epoch}=lr_{initial}∗Lambda(epoch) lrepoch=lrinitialLambda(epoch)

  2. 代码

    import torch
    import matplotlib.pyplot as plt
    
    model = torch.nn.Linear(2, 1)
    optimizer = torch.optim.SGD(model.parameters(), lr=100)
    lambda1 = lambda epoch: 0.65 ** epoch
    scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1)
    
    
    lrs = []
    
    for i in range(10):
        optimizer.step()
        lrs.append(optimizer.param_groups[0]["lr"])
    #     print("Factor = ", round(0.65 ** i,3)," , Learning Rate = ",round(optimizer.param_groups[0]["lr"],3))
        scheduler.step()
    
    plt.plot(range(10),lrs)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  3. 图片

    在这里插入图片描述

2. MultiplicativeLR

  1. 公式
    l r e p o c h = l r e p o c h − 1 ∗ L a m b d a ( e p o c h ) lr_{epoch}=lr_{epoch - 1}∗Lambda(epoch) lrepoch=lrepoch1Lambda(epoch)

  2. 图片

    在这里插入图片描述

3. StepLR

  1. 公式

    在这里插入图片描述

  2. 图片

    在这里插入图片描述

4. MultiStepLR

  1. 公式

    在这里插入图片描述

  2. 代码

    model = torch.nn.Linear(2, 1)
    optimizer = torch.optim.SGD(model.parameters(), lr=100)
    scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[6,8,9], gamma=0.1)
    lrs = []
    
    for i in range(10):
        optimizer.step()
        lrs.append(optimizer.param_groups[0]["lr"])
    #     print("Factor = ",0.1 if i in [6,8,9] else 1," , Learning Rate = ",optimizer.param_groups[0]["lr"])
        scheduler.step()
    
    plt.plot(range(10),lrs)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  3. 图片

    在这里插入图片描述

5. CosineAnnealingLR

  1. 公式
    η t = η m i n + 1 2 ( η m a x − η m i n ) ( 1 + c o s ( T c u r T m a x π ) ) η_t=η_{min}+\frac12(η_{max}−η_{min})(1+cos(\frac {T_{cur}}{T_{max}}π)) ηt=ηmin+21(ηmaxηmin)(1+cos(TmaxTcurπ))

  2. 代码

    model = torch.nn.Linear(2, 1)
    optimizer = torch.optim.SGD(model.parameters(), lr=100)
    scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=10, eta_min=0)#T_max表示半个周期的大小
    lrs = []
    
    
    for i in range(100):
        optimizer.step()
        lrs.append(optimizer.param_groups[0]["lr"])
    #     print("Factor = ",i," , Learning Rate = ",optimizer.param_groups[0]["lr"])
        scheduler.step()
    
    plt.plot(lrs)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  3. 图片

    在这里插入图片描述

6. CosineAnnealingWarmRestarts

  1. 公式
    η t = η m i n + 1 2 ( η m a x − η m i n ) ( 1 + c o s ( T c u r T i π ) ) η_t=η_{min}+\frac12(η_{max}−η_{min})(1+cos(\frac {T_{cur}}{T_{i}}π)) ηt=ηmin+21(ηmaxηmin)(1+cos(TiTcurπ))

  2. 代码

       import torch
       import matplotlib.pyplot as plt
       
       model = torch.nn.Linear(2, 1)
       optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
       lr_sched = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=10, T_mult=1, eta_min=0.001, last_epoch=-1)
       #每经过T_0轮后,开始重新启动scheduler
       
       lrs = []
       
       for i in range(100):
           lr_sched.step()
           lrs.append(
               optimizer.param_groups[0]["lr"]
           )
       
       plt.plot(lrs)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40875?site
推荐阅读
相关标签
  

闽ICP备14008679号