pytorch实现l1和l2正则化
时间: 2023-09-01 21:12:49 浏览: 142
pytorch-lasso:使用PyTorch的L1正则化最小二乘
要使用PyTorch实现L1和L2正则化,可以通过在损失函数中添加相应的正则化项来实现。下面是一个简单的示例:
```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.linear = nn.Linear(10, 1)
def forward(self, x):
return self.linear(x)
model = MyModel()
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 定义正则化权重
l1_lambda = 0.01
l2_lambda = 0.01
# 训练循环
for epoch in range(num_epochs):
for inputs, targets in data_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
# 添加L1正则化
l1_reg = torch.tensor(0.)
for param in model.parameters():
l1_reg += torch.norm(param, 1)
loss += l1_lambda * l1_reg
# 添加L2正则化
l2_reg = torch.tensor(0.)
for param in model.parameters():
l2_reg += torch.norm(param, 2)
loss += l2_lambda * l2_reg
loss.backward()
optimizer.step()
```
在上述代码中,我们定义了一个`MyModel`类来表示我们的模型。然后,我们使用`nn.MSELoss()`作为损失函数,并使用`optim.SGD`作为优化器。在训练循环中,我们通过遍历模型的参数并计算其L1和L2范数来计算正则化项。然后将正则化项加到损失函数中,通过调整`l1_lambda`和`l2_lambda`参数来控制正则化的强度。最后,我们进行反向传播和参数更新以完成训练。
请注意,这只是一个简单的示例,实际应用中可能还会有其他细节需要考虑,如权重衰减(weight decay)等。
阅读全文