代码之家  ›  专栏  ›  技术社区  ›  patapouf_ai

PyTorch:如何在任何给定时刻更改优化器的学习速率(无LR计划)

  •  66
  • patapouf_ai  · 技术社区  · 7 年前

    在PyTorch中,是否可以在培训过程中动态更改优化器的学习速率(我不想事先定义学习速率计划)?

    假设我有一个优化器:

    optim = torch.optim.SGD(model.parameters(), lr=0.01)
    

    现在,由于我在训练期间进行了一些测试,我意识到我的学习率太高了,所以我想改为 0.001 . 似乎没有办法 optim.set_lr(0.001) 但有什么方法可以做到这一点吗?

    2 回复  |  直到 7 年前
        1
  •  134
  •   patapouf_ai    5 年前

    因此,学习率存储在 optim.param_groups[i]['lr'] optim.param_groups 是一个不同体重组的列表,这些体重组可以有不同的学习率。因此,只需执行以下操作:

    for g in optim.param_groups:
        g['lr'] = 0.001
    

    会成功的。


    或者,

    如评论中所述,如果您的学习速度仅取决于历元数,则可以使用 learning rate scheduler .

    例如(修改文档中的示例):

    torch.optim.lr_scheduler import LambdaLR
    optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
    # Assuming optimizer has two groups.
    lambda_group1 = lambda epoch: epoch // 30
    lambda_group2 = lambda epoch: 0.95 ** epoch
    scheduler = LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
    for epoch in range(100):
        train(...)
        validate(...)
        scheduler.step()
    

    而且 ,有一个 prebuilt learning rate scheduler to reduce on plateaus.

        2
  •  10
  •   desertnaut SKZI    3 年前

    而不是循环输入 patapouf_ai's answer ,您可以通过以下方式直接执行:

    optim.param_groups[0]['lr'] = 0.001