如何使用PyTorch中的优化器和学习率调度器
时间: 2024-02-03 22:04:39 浏览: 78
在PyTorch中,优化器和学习率调度器都是通过torch.optim模块来实现的。
首先,我们需要定义一个优化器,这里以Adam优化器为例:
```python
import torch.optim as optim
optimizer = optim.Adam(model.parameters(), lr=0.001)
```
其中,model为我们定义好的神经网络模型,lr为学习率。
接下来,我们可以在训练过程中使用这个优化器来更新模型参数:
```python
optimizer.zero_grad() # 清空梯度
outputs = model(inputs) # 前向传播
loss = criterion(outputs, labels) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新参数
```
在每一轮训练之前,我们需要调用optimizer.zero_grad()来清空梯度。
除了定义优化器之外,我们还可以定义一个学习率调度器,用于动态地调整学习率。PyTorch中提供了多种学习率调度器,这里以StepLR调度器为例:
```python
from torch.optim.lr_scheduler import StepLR
scheduler = StepLR(optimizer, step_size=10, gamma=0.1)
```
其中,optimizer为我们定义好的优化器,step_size为每隔多少个epoch调整一次学习率,gamma为学习率调整的倍数。
在每个epoch结束时,我们可以调用scheduler.step()来更新学习率:
```python
for epoch in range(num_epochs):
# ...
scheduler.step() # 更新学习率
```
除了StepLR调度器外,PyTorch中还提供了其他调度器,比如MultiStepLR、ExponentialLR等,可以根据具体需求选择。
阅读全文