我正在使用 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)
我正在尝试设置一个最小学习率,这样它就不会变为 0。我该怎么做?
最佳答案
新的学习率总是这样计算的:
对于初始学习率,它们是指第一个,而不是最后一个。
这意味着我们可以这样写:
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
。
关于python - 如何在 lr_scheduler LambdaLR 中设置最小学习率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67040362/