如何在 PyTorch 中合并两个学习率调度器?

问题描述 投票:0回答:2

我想使用 OneCycleLR 将 LR 从较低值预热,然后使用 ReduceLROnPlateau 将 LR 从峰值降低。

我知道我可以在使用OneCycleLR增加LR后手动模拟ReduceLROnPlateau,但是有没有更简单的方法直接一起使用这两个调度程序?

提前致谢。

python pytorch
2个回答
2
投票

现在PyTorch中有一个特殊的ChainedScheduler,它只是一一调用调度器。但为了能够使用它,所有调度程序都必须是“可链接的”,正如文档中所写的那样。


0
投票

PyToch 在 github 上发布了方法,而不是官方指南。

您可以尝试以下代码片段:

import torch
from torch.nn import Parameter
from torch.optim import SGD
from torch.optim.lr_scheduler import ExponentialLR, StepLR

model = [Parameter(torch.randn(2, 2, requires_grad=True))]
optimizer = SGD(model, 0.1)

scheduler1 = ExponentialLR(optimizer, gamma=0.9)
scheduler2 = StepLR(optimizer, step_size=5, gamma=0.1)

for epoch in range(10):

    print(epoch, scheduler2.get_last_lr()[0])

    optimizer.step()
    scheduler1.step()
    scheduler2.step()
© www.soinside.com 2019 - 2024. All rights reserved.