在数据经过模型之后
l1, l2 = torch.tensor(0), torch.tensor(0) optimizer.zero_grad() output = model(input) for params in model.parameters(): l1 += torch.norm(param,1) #torch.norm(param,1)为求param的l1范数 l2 += torch.norm(param,2) #torch.norm(param,2)为求param的l2范数 loss_origin = loss(output,label) loss = loss_origin + l1 + l2 loss.backward() optimizer.step()
ATT:不能使用在模型中输出!
使用以下这种方法是输出的中间层的输出,而不是参数!
#错误示范 class model(nn.Module): def __init__(self): super().__init__() self.linear1 = nn.Linear(64,32) self.linear2 = nn.Linear(32,16) def forward(self,input): linear1_out = self.linear1(input) linear2_out = self.linear2(linear1_out) return linear1_out,linear2_out
使用pytorch自带的权重衰减
torch.optim
自带的参数weight_decay
可以设置权值衰减率,即可以实现L2正则化
向目标函数加入正则的具体实现
2018-12-1
赏