1

例如,设置前 100 个 epoch 的 lr = 0.01,从 epoch 101 到 epoch 1000 的 lr = 0.001,对于 epoch 1001-4000,lr = 0.0005。基本上,我的学习率计划不会让它以固定的步数呈指数衰减。我知道它可以通过自定义函数来实现,只是好奇是否已经开发了函数可以做到这一点。

4

1 回答 1

3

torch.optim.lr_scheduler.LambdaLR就是你要找的。它返回multiplier初始学习率,因此您可以为任何给定的时期指定任何值。对于您的示例,它将是:

def lr_lambda(epoch: int):
    if 100 < epoch < 1000:
        return 0.1
    if 1000 < epoch 4000:
        return 0.05

# Optimizer has lr set to 0.01
scheduler = LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
for epoch in range(100):
    train(...)
    validate(...)
    optimizer.step()
    scheduler.step()

在 PyTorch 中,有一些常用功能(如MultiStepLRor ExponentialLR),但对于自定义用例(如您的),LambdaLR是最简单的。

于 2020-04-28T08:47:40.423 回答