Python 如何在损失函数中添加L2正则化项

Python 如何在损失函数中添加L2正则化项,python,pytorch,Python,Pytorch,我将比较有正则化和无正则化的区别,所以我想定制两个损失函数 我的L2范数损失函数: 1.如何在损失函数中添加L2范数 2.如果我想自己编写损失函数(不使用optim.SGD)并通过autograd完成grad,我该怎么做 谢谢你的帮助 您可以自己显式计算权重的范数,并将其添加到损失中 reg = 0 for param in CNN.parameters(): reg += 0.5 * (param ** 2).sum() # you can replace it with abs().

我将比较有正则化和无正则化的区别,所以我想定制两个损失函数

我的L2范数损失函数:

1.如何在损失函数中添加L2范数

2.如果我想自己编写损失函数(不使用optim.SGD)并通过autograd完成grad,我该怎么做


谢谢你的帮助

您可以自己显式计算权重的范数,并将其添加到损失中

reg = 0
for param in CNN.parameters():
  reg += 0.5 * (param ** 2).sum()  # you can replace it with abs().sum() to get L1 regularization
loss = criterion(CNN(x), y) + reg_lambda * reg  # make the regularization part of the loss
loss.backward()  # continue as usuall

有关更多信息,请参阅。

如果要尝试使用正则化和不使用正则化,则无需编写两个不同的损失函数。你只需要写一个正则化,当你想尝试不正则化时,把阻尼参数alpha设置为零。请编辑并编写带有正则化的损失函数,以便我们可以指导您。@Kefeng91 Criteria=nn.CrossEntropyLoss()optimizer=optim.SGD(net.parameters(),lr=lr,weight\u detaction=0.01)----我得到一个建议,可以添加一个参数“weight\u detaction”。如果我把它设为零,它意味着没有正则化的损失函数,如果我设为任意值,我将得到我需要的。对吧?我的意思是,所以不是一个“请为我写代码”的论坛。你应该先尝试自己编写正向函数,然后再回来告诉我们更多关于你尝试的细节。@Kefeng91当然,有一些误解。我自己写的网络,但我不知道如何制作自定义损失函数。这只是我代码中的一个小问题/部分。很抱歉,我没有注意到这几乎是所有网络的主要结构。给定熵方程,如果你将alpha设为零,你将没有正则化。如果将alpha设置为任何其他值,则将进行正则化。
reg = 0
for param in CNN.parameters():
  reg += 0.5 * (param ** 2).sum()  # you can replace it with abs().sum() to get L1 regularization
loss = criterion(CNN(x), y) + reg_lambda * reg  # make the regularization part of the loss
loss.backward()  # continue as usuall