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

torch.optim.lr_scheduler. StepLR(optimizer, step_size, gamma=0.1, last_epoch=- 1, verbose=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

torch.optim.lr_scheduler. LambdaLR(optimizer, lr_lambda, last_epoch=- 1, verbose=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

torch.optim.lr_scheduler. MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=- 1, verbose=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的变化来调整学习率的

torch.optim.lr_scheduler. ReduceLROnPlateau(optimizer, mode=’min’, factor=0.1, patience=10, threshold=0.0001, threshold_mode=’rel’, cooldown=0, min_lr=0, eps=1e-08, verbose=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)

Original: https://blog.csdn.net/weixin_47062807/article/details/121581468
Author: weiweiweimengting
Title: torch.optim.lr_scheduler 不同的学习率调整策略

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/710125/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球