AdamW是Adam的一种改进算法,它引入了权重衰减项。带有权重衰减的Adam在优化算法中更加稳定和可靠,尤其在训练深度神经网络时更加有效。以下是使用PyTorch实现AdamW和带有权重衰减的Adam的代码示例:
import torch
import torch.nn as nn
import torch.optim as optim
# 定义模型
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.fc = nn.Linear(10, 1)
def forward(self, x):
return self.fc(x)
# 创建模型和数据
model = Model()
data = torch.randn(10, 10)
target = torch.randn(10, 1)
# 定义AdamW优化器
optimizer = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
# 训练模型
for epoch in range(100):
optimizer.zero_grad()
output = model(data)
loss = nn.MSELoss()(output, target)
loss.backward()
optimizer.step()
# 使用带有权重衰减的Adam
optimizer = optim.Adam(model.parameters(), lr=0.001, weight_decay=0.01)
# 训练模型
for epoch in range(100):
optimizer.zero_grad()
output = model(data)
loss = nn.MSELoss()(output, target)
loss.backward()
optimizer.step()
在上述代码示例中,我们首先定义了一个简单的模型Model
,然后创建了模型和数据。接下来,我们使用optim.AdamW
创建了一个AdamW优化器,并将模型的参数传递给优化器。在训练过程中,我们使用optimizer.zero_grad()
清零梯度,计算模型的输出和损失,然后反向传播更新模型参数。
在第二个示例中,我们使用optim.Adam
创建了一个带有权重衰减的Adam优化器。与AdamW相比,它没有专门设计的AdamW优化器,但可以通过设置weight_decay
参数来实现权重衰减。其他训练过程与上述示例相同。
这些示例代码可以帮助你理解和使用AdamW和带有权重衰减的Adam优化器。根据你的具体需求,选择适合的优化算法来训练你的模型。