推荐答案
在 PyTorch 中,StepLR 是一种学习率调度器,用于在训练过程中按照固定的步长调整学习率。使用 StepLR 的基本步骤如下:
// www.javascriptcn.com code example
import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim.lr_scheduler import StepLR
# 定义一个简单的模型
model = nn.Linear(10, 1)
# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.1)
# 定义 StepLR 调度器,step_size 表示每隔多少 epoch 调整一次学习率,gamma 表示学习率衰减的倍数
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)
# 训练循环
for epoch in range(100):
# 训练代码...
# 在每个 epoch 结束时调用 scheduler.step() 来更新学习率
scheduler.step()本题详细解读
StepLR 的作用
StepLR 是 PyTorch 提供的一种学习率调度器,用于在训练过程中按照固定的步长调整学习率。它通常用于在训练过程中逐步降低学习率,以帮助模型更好地收敛。
参数说明
optimizer: 需要调整学习率的优化器。step_size: 每隔多少个 epoch 调整一次学习率。例如,step_size=30表示每 30 个 epoch 调整一次学习率。gamma: 学习率衰减的倍数。例如,gamma=0.1表示每次调整学习率时,学习率会乘以 0.1。
使用步骤
- 定义模型和优化器: 首先需要定义一个模型和一个优化器。
- 创建 StepLR 调度器: 使用
StepLR创建一个调度器,并传入优化器、step_size和gamma参数。 - 在训练循环中调用
scheduler.step(): 在每个 epoch 结束时调用scheduler.step(),调度器会根据当前的 epoch 数自动调整学习率。
示例代码解析
在示例代码中,我们定义了一个简单的线性模型和一个 SGD 优化器。然后创建了一个 StepLR 调度器,设置 step_size=30 和 gamma=0.1,表示每 30 个 epoch 将学习率乘以 0.1。在训练循环中,每个 epoch 结束时调用 scheduler.step() 来更新学习率。
注意事项
scheduler.step()应该在每个 epoch 结束时调用,而不是在每个 batch 结束时调用。StepLR适用于学习率需要按照固定步长衰减的场景,如果学习率需要更复杂的调整策略,可以考虑使用其他调度器,如ReduceLROnPlateau或CosineAnnealingLR。