torch.optim.lr_scheduler 不同的学习率调整策略

1. torch.optim.lr_scheduler.StepLR

torch.optim.lr_scheduler.StepLR(optimizerstep_sizegamma=0.1last_epoch=- 1verbose=False)

函数作用:

        每隔step_size个epoch,将学习率衰减为(上一次的学习率  *  gamma)

参数说明:         

  • optimizer (Optimizer) – 训练过程中使用的优化器.

  • step_size (int) – 学习率每隔多少个epoch衰减一次

  • gamma (float) – 学习率的衰减系数,默认为0.1

  • last_epoch (int) – 没太搞懂,文档中只说了设置值为-1时,将初始的学习率设置为optimizer中使用的学习率

  • verbose (bool) – 如果为真,每次学习率更新时在控制台打印相应信息,默认为false。

使用方式如下:

def stepLr():
    lr = 0.1
    model = nn.Linear(10, 1)
    optimizer = torch.optim.Adam(model.parameters(), lr=lr)
    scheduler = lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)

    print(optimizer.state_dict())

    for epoch in range(100):
        optimizer.step()
        scheduler.step()
        print(optimizer.state_dict()['param_groups'][0]['lr'])

打印结果:

{'param_groups': [{'weight_decay': 0, 'eps': 1e-08, 'betas': (0.9, 0.999), 'amsgrad': False, 'lr': 0.1, 'initial_lr': 0.1, 'params': [139656888615128, 139658298281128]}], 'state': {}}
0.1
0.1
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.0010000000000000002
0.0010000000000000002
0.0010000000000000002

2. torch.optim.lr_scheduler.LambdaLR

torch.optim.lr_scheduler.LambdaLR(optimizerlr_lambdalast_epoch=- 1verbose=False)

 函数作用:

        根据设定的lambda表达式,设定每个epoch的学习率

参数说明:         

  • optimizer (Optimizer) – 训练过程中使用的优化器.

  • lr_lambda (function or list) – 一个lambda表达式,用来计算当前epoch的学习率

  • last_epoch (int) – 同上

  • verbose (bool) – 同上

使用方式如下:

def lambdaLr():
    lr = 0.1
    model = nn.Linear(10, 1)
    optimizer = torch.optim.Adam(model.parameters(), lr=lr)
    lambda1 = lambda epoch: epoch / 10
    scheduler = lr_scheduler.LambdaLR(optimizer, lambda1)

    print(optimizer.state_dict())

    for epoch in range(5):
        optimizer.step()
        scheduler.step()
        print(optimizer.state_dict()['param_groups'][0]['lr'])

 打印结果:

{'param_groups': [{'lr': 0.0, 'betas': (0.9, 0.999), 'params': [140612683161816, 140614092827816], 'initial_lr': 0.1, 'weight_decay': 0, 'amsgrad': False, 'eps': 1e-08}], 'state': {}}
0.010000000000000002
0.020000000000000004
0.03
0.04000000000000001
0.05

3. torch.optim.lr_scheduler.MultiStepLR

torch.optim.lr_scheduler.MultiStepLR(optimizermilestonesgamma=0.1last_epoch=- 1verbose=False)

 函数作用:

        可以设置多个epoch断点,当达到设定的epoch时,按照给定的gamma衰减(可以参考StepLR)

参数说明:         

  • optimizer (Optimizer) – 训练过程中使用的优化器.

  • milestones (list) – 一个设定断点的epoch列表,列表中元素必须递增

  • gamma (float) – 学习率的衰减系数,默认为0.1

  • last_epoch (int) – 同上

  • verbose (bool) – 同上

使用方式如下:

def multiStepLr():
    lr = 0.1
    model = nn.Linear(10, 1)
    optimizer = torch.optim.Adam(model.parameters(), lr=lr)
    scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[3, 8], gamma=0.1)

    print(optimizer.state_dict())

    for epoch in range(10):
        optimizer.step()
        scheduler.step()
        print(optimizer.state_dict()['param_groups'][0]['lr'])

打印结果:

{'param_groups': [{'betas': (0.9, 0.999), 'eps': 1e-08, 'initial_lr': 0.1, 'weight_decay': 0, 'params': [140349444681944, 140350854339752], 'amsgrad': False, 'lr': 0.1}], 'state': {}}
0.1
0.1
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.010000000000000002
0.0010000000000000002
0.0010000000000000002
0.0010000000000000002

其他的一些像torch.optim.lr_scheduler.ExponentialLR,torch.optim.lr_scheduler.CosineAnnealingLR均是随着epoch的变化来调整学习率的

4. torch.optim.lr_scheduler.ReduceLROnPlateau

torch.optim.lr_scheduler.ReduceLROnPlateau(optimizermode='min'factor=0.1patience=10threshold=0.0001threshold_mode='rel'cooldown=0min_lr=0eps=1e-08verbose=False)

 函数作用:

        根据一些设定的指标改变学习率

参数说明:         

  • optimizer (Optimizer) – 训练过程中使用的优化器.

  • mode (str) –选择max或min。选择min后,当检测指标停止下降后,学习率会衰减;选择max后,当检测指标停止上升后,学习率会衰减。

  • factor (float) –学习率的衰减因子。new_lr = lr * factor,默认为0.1

  • patience (int) –当设定的指标没有进一步提升时设置在几个epoch之后执行学习率衰减。默认设为10.

  • threshold (float) – 一般不用

  • threshold_mode (str) – 一般不用

  • cooldown (int) – 一般不用

  • min_lr (float or list) – 一般不用

  • eps (float) –学习率的最小衰减,如果新的学习率和旧的学习率之差小于设定值,则不进行学习率的更新(此时学习率太小,梯度下降没有意义)

  • verbose (bool) – 同上

使用方式如下:

optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
scheduler = ReduceLROnPlateau(optimizer, 'min')
for epoch in range(10):
    train(...)
    val_loss = validate(...)
    # Note that step should be called after validate()
    scheduler.step(val_loss)

更详细的说明参见官方文档torch.optim — PyTorch 1.10.0 documentation

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值