以下是一个简单的PyTorch
代码示例,演示了如何使用StepLR
学习率调度器进行学习率调整:
import torch
from torch.optim import SGD
from torch.optim.lr_scheduler import StepLR
# 定义模型和损失函数
model = torch.nn.Linear(10, 1)
loss_fn = torch.nn.MSELoss()
# 定义优化器和学习率调度器
optimizer = SGD(model.parameters(), lr=0.01)
lr_step = StepLR(optimizer, step_size=10, gamma=0.1)
# 训练模型
for epoch in range(20):
# 计算前向传播结果
x = torch.randn(16, 10)
y = torch.randn(16, 1)
y_pred = model(x)
# 计算损失函数值
loss = loss_fn(y_pred, y)
# 更新模型参数
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 调整学习率
lr_step.step()
# 打印当前epoch和学习率
print('Epoch [{}/{}], lr: {:.6f}, Loss: {:.6f}'
.format(epoch+1, 20, optimizer.param_groups[0]['lr'], loss.item()))
其中,optimizer
是优化器对象,用于更新模型的参数,step_size
和gamma
是两个参数,用于控制学习率的调整。lr_step
是一个学习率调度器对象,它将在训练过程中根据指定的策略调整学习率。
具体来说,StepLR
是一个PyTorch
中的学习率调度器,它实现了按步长调整学习率的策略。在训练过程中,学习率调度器会根据预定义的策略调整学习率。在StepLR
中,每隔指定的step_size个epoch
,学习率将乘以gamma
,以降低学习率。具体的调整公式为:
new_lr = lr * gamma ** (epoch // step_size)
其中,lr
是初始学习率,gamma
是衰减因子,epoch
是当前训练的epoch
数,step_size
是调整间隔,即每隔多少个epoch
调整一次学习率。
在使用StepLR
时,需要将其作为参数传递给优化器对象。在每个epoch
结束后,学习率调度器会自动调整学习率。例如,如果step_size=10
,gamma=0.1
,那么每10
个epoch
,学习率将乘以0.1
,即降低一个数量级。
回到代码中,lr_step
对象是用于控制优化器对象中学习率的,每当训练到一个指定的epoch
,它会自动调整学习率,以使训练更加稳定和高效。在训练过程中,我们可以通过访问optimizer.param_groups
属性来查看当前的学习率。例如,如果优化器只有一个参数组,我们可以使用以下代码来查看当前的学习率:
print(optimizer.param_groups[0]['lr'])
StepLR
是PyTorch
中的一个学习率调度器,可以按步长调整学习率。使用StepLR
需要指定调整间隔和衰减因子。通过将StepLR
对象作为参数传递给优化器对象,我们可以在训练过程中动态地调整学习率,以帮助模型更好地适应训练数据。