Company dynamics
Pytorch自定义优化器Optimizer简单总结(附AdamW代码分析)
在 PyTorch 中,可以使用 `torch.optim.AdamW` 类来实现 AdamW 优化器。AdamW 是一种基于梯度的优化算法,它在 Adam 优化器的基础上加入了权重衰减 (weight decay) 的机制,用于控制模型参数的正则化。
下面是一个简单的示例,展示了如何在 PyTorch 中使用 AdamW 优化器:
```python
import torch
import torch.nn as nn
import torch.optim as optim
# 定义模型
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
self.fc=nn.Linear(10, 1)
def forward(self, x):
return self.fc(x)
# 创建模型和数据
model=MyModel()
data=torch.randn(10, 10)
target=torch.randn(10, 1)
# 定义损失函数和优化器
criterion=nn.MSELoss()
optimizer=optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
# 训练模型
for epoch in range(100):
# 前向传播
output=model(data)
loss=criterion(output, target)
# 反向传播和梯度更新
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 打印损失
print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")
```
在上述示例中,我们首先创建了一个自定义的模型 `MyModel`,然后定义了输入数据和目标数据。接着,我们定义了损失函数 `nn.MSELoss()` 和优化器 `optim.AdamW`。在训练过程中,我们通过调用优化器的 `zero_grad()` 方法来清空之前的梯度,然后进行前向传播、计算损失、反向传播和梯度更新。
需要注意的是,在创建 `optim.AdamW` 优化器时,我们传递了模型的参数 `model.parameters()`,以及学习率 `lr` 和权重衰减 `weight_decay`。你可以根据具体需求调整这些参数。
希望这个示例能帮助你理解如何在 PyTorch 中使用 AdamW 优化器。如果你有进一步的问题,请随时提问。