如何在lr_调度器LambdaLR中设置最小学习速率?

2024-06-15 06:45:16 发布

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

我使用LambdaLR作为学习率函数:

import torch
import torch.nn as nn
import matplotlib.pyplot as plt

model = torch.nn.Linear(2, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
lambda1 = lambda epoch: 0.99 ** epoch
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1, last_epoch = -1)

lrs = []


for i in range(2001):
    optimizer.step()
    lrs.append(optimizer.param_groups[0]["lr"])
    scheduler.step()

plt.plot(lrs)  

enter image description here

我正在尝试设置一个最小学习速率,这样它就不会变为0。我该怎么做


Tags: lambdaimportmodelaspltnntorchoptim
1条回答
网友
1楼 · 发布于 2024-06-15 06:45:16

新的学习率总是这样计算的:

LRepoch = LRinitial * Lambda(epoch):

初始学习率指的是第一个,而不是最后一个

这意味着我们可以写:

INITIAL_LEARNING_RATE = 0.01
your_min_lr = 0.0001

lambda1 = lambda epoch: max(0.99 ** epoch, your_min_lr / INITIAL_LEARNING_RATE)

然后当INITIAL_LEARNING_RATE * (0.99 ** epoch)变得太小时your_min_lr返回,因为INITIAL_LEARNING_RATE * your_min_lr / INITIAL_LEARNING_RATE正好等于your_min_lr

相关问题 更多 >