【发布时间】:2020-10-05 19:19:28
【问题描述】:
我想计算神经网络中的 L1 损失,我在 https://discuss.pytorch.org/t/simple-l2-regularization/139/2 遇到了这个例子,但是这段代码有一些错误。
这真的是如何计算神经网络中的 L1 损失还是有更简单的方法?
l1_crit = nn.L1Loss()
reg_loss = 0
for param in model.parameters():
reg_loss += l1_crit(param)
factor = 0.0005
loss += factor * reg_loss
这是否等同于简单的操作:
loss = torch.nn.L1Loss()
我假设不是,因为我没有传递任何网络参数。只需检查是否存在执行此操作的现有功能。
【问题讨论】:
-
该代码甚至不起作用。
l1_crit需要两个参数,而不仅仅是一个。为什么要根据模型的参数计算损失?第二个显然与第一个不同,因为第一行是相同的(具有不同的size_average值,无论如何都已弃用),但其余部分被省略。 -
对不起,我从discuss.pytorch.org/t/simple-l2-regularization/139/2 得到了这个代码。我如何使它起作用,我将删除折旧的论点。但是我可以将参数提供给函数,对吗?
-
@dorien 您提供的链接是关于 L1 正则化的。那是你要的吗?这与在网络末端计算 L1Loss 不同。另外,如果你真的想要 L1 正则化,你应该用零替换(或者更确切地说填充)目标
-
哦,我确实想包含 L1 正则化。您能否更具体地说明我应该如何用零替换目标?
-
@dorien 和 L1 你基本上希望你的参数是稀疏的,所以你想惩罚它们为零
l1_crit(param, target=torch.zeros_like(param), size_average=False),但通常你不需要使用L1Loss。您也可以只使用规范,请参阅stackoverflow.com/questions/44641976/… 我认为没有更简单的方法可以做到这一点。当然在链接中,用例不同,你会取模型的所有参数
标签: python machine-learning deep-learning pytorch