torch.optim.lr_scheduler_LRScheduler()函数在PyTorch优化器中的作用
在PyTorch中,torch.optim.lr_scheduler.LRScheduler是一个用于管理和调整优化器的学习率的类。它可以根据提供的策略和参数调整学习率,并在每个epoch或每次迭代完成后更新优化器的学习率。
使用torch.optim.lr_scheduler.LRScheduler有两个主要步骤:创建一个scheduler对象和在每个epoch或迭代中更新优化器的学习率。
首先,我们可以使用以下代码创建一个scheduler对象:
scheduler = torch.optim.lr_scheduler.LRScheduler(optimizer, args)
参数optimizer是我们要使用的优化器对象,args是一个字典,包含所有用于调整学习率的参数和策略。可以使用以下示例参数:
- schedule:一个函数,根据epoch索引调整学习率的策略。默认值是None,表示学习率保持不变。
- epochs:要训练的总epoch数,默认值是None。
- step_size:每隔多少个epoch调整学习率的间隔,默认值是1。
- gamma:学习率调整的乘法因子,默认值是0.1。
假设我们使用的优化器是Adam,并且希望每5个epoch将学习率调整为原来的0.1倍,可以使用以下代码创建一个scheduler对象:
scheduler = torch.optim.lr_scheduler.LRScheduler(optimizer, {'schedule': torch.optim.lr_scheduler.StepLR, 'step_size': 5, 'gamma': 0.1})
接下来,在每个epoch或迭代中更新优化器的学习率。我们可以使用以下代码完成更新:
scheduler.step(epoch)
这里的epoch是当前的epoch索引,可以是一个整数值。每次调用scheduler.step()将更新优化器的学习率,根据提供的策略和参数相应地调整学习率。
下面是一个完整的使用例子,展示了如何使用torch.optim.lr_scheduler.LRScheduler来管理和调整优化器的学习率:
import torch
import torch.optim as optim
from torch.optim.lr_scheduler import StepLR
# 创建一个模型和优化器
model = torch.nn.Linear(10, 1)
optimizer = optim.SGD(model.parameters(), lr=0.1)
# 创建一个scheduler对象
scheduler = torch.optim.lr_scheduler.LRScheduler(optimizer, {'schedule': StepLR, 'step_size': 5, 'gamma': 0.1})
# 模拟训练过程
for epoch in range(10):
# 更新学习率
scheduler.step(epoch)
# 执行训练
train_loss = 0
for batch_data, batch_labels in train_loader:
optimizer.zero_grad()
output = model(batch_data)
loss = criterion(output, batch_labels)
loss.backward()
optimizer.step()
train_loss += loss.item() * batch_data.size(0)
# 打印结果
print(f"Epoch {epoch}: train loss={train_loss/len(train_loader.dataset)}")
在这个例子中,我们使用StepLR作为学习率调整策略,每5个epoch将学习率调整为原来的0.1倍。在每个epoch开始时,调用scheduler.step(epoch)来更新学习率。然后,我们使用更新后的学习率进行训练,并打印每个epoch的训练损失。
