如何在PyTorch中组合2个学习速率调度器?

2024-09-27 22:32:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图遵循thispytorch的optim文档,使用optimizer.param_groups对多个学习率调度器进行分组,但它似乎只适用于LambdaLR一个

如果我有我的模型:

net = Model()

我天真地尝试添加具有以下内容的调度程序:

learning_rate = 0.02
optimizer = optim.Adam(net.parameters(), lr = learning_rate)
net.optimizer = optimizer

scheduler1 = torch.optim.lr_scheduler.CyclicLR(net.optimizer, base_lr=1e-10, max_lr=1e-3, step_size_up=3000, mode="triangular2", cycle_momentum=False)
net.scheduler1 = scheduler1

scheduler2 = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr=1e3, max_lr=1e-1, step_size_up=1000, mode="triangular2", cycle_momentum=False)
net.scheduler2 = scheduler2

我试着用scheduler1来训练我的一个神经网络,而scheduler2只是用于它的值。也就是说,在每个历元,我都使用它的值来插入一些函数:

for epoch in num_epochs:
    loss = 5 - optimizer.param_groups[0]["lr"]

请注意,这只是一个示例函数

问题是,我认为该模型只是将scheduler2作为其调度器。自从 optimizer.param_groups[1]["lr"]返回:

IndexError: list index out of range

更新1
为了澄清,我的模型中有一个神经网络net。我希望这个神经网络有一个lr调度器,scheduler1。在我的模型net中有一个特定的函数,它需要在每个历元中取特定的值。它需要获取的值类似于scheduler2中的值。因此,我需要将两个调度器添加到我的模型中,第一个用于我的神经网络,第二个用于我的函数(除了历元数之外,与任何模型的参数无关)


Tags: 函数模型netrateparam神经网络调度optim

热门问题