PyTorch中torch.optim.lr_scheduler_LRScheduler()函数的使用案例
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, verbose=False)
这个函数使用指定的lr_lambda函数调整优化器的学习率。 每次调用step()方法时,都会通过更改优化器的学习率以及更新学习率规则更新器的内部变量。
参数:
1. optimizer (Optimizer) - 需要调整学习率的优化器
2. lr_lambda (function or list of functions) - 一个包含学习率调整函数的列表或一个单一的函数。
3. last_epoch (int, optional) - 上一个epoch的索引,默认为-1
4. verbose (bool, optional) - 如果为True,会`每次epoch结束时打印一次调整的学习率
返回值:
LRScheduler object
使用例子:
import torch
from torch import nn, optim
from torch.optim import lr_scheduler
# 创建网络模型
model = nn.Linear(10, 10)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
# 创建学习率调整器
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda epoch: 0.95 ** epoch)
# 训练过程中迭代多个epoch
for epoch in range(10):
# 训练...
# 更新学习率
scheduler.step()
# 打印当前学习率
print(f"Epoch {epoch}: learning rate = {optimizer.param_groups[0]['lr']}")
# 每次更新完学习率后进行模型的训练和验证
for batch in data_loader:
# 前向传播
output = model(batch)
# 计算损失
loss = criterion(output)
# 反向传播和参数优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 输出:
Epoch 0: learning rate = 0.1
Epoch 1: learning rate = 0.095
Epoch 2: learning rate = 0.09025
Epoch 3: learning rate = 0.0857375
...
Epoch 9: learning rate = 0.059874912935972506
在上面的例子中,我们创建了一个线性模型和一个交叉熵损失。我们使用随机梯度下降(SGD)作为优化器。然后,我们创建了一个学习率调整器对象,并指定一个学习率调整函数(lambda函数)来更新学习率。在每个epoch结束时,我们打印出当前的学习率,然后更新优化器的学习率。在每个batch的训练中,我们首先进行正向传播、损失计算,然后进行反向传播和参数优化,以此来进行模型的训练。
