对于CONV2D L2惩罚计算,代码使用p参数。l2_penalty = l2_lambda * sum([(p**2).sum() for p in conv_layer.parameters()])
这里的p变量是什么,并为什么迭代?根据我的发现,conv_layer.parameters()返回p的2个张量。迭代中的第一个p是输出张量.But,迭代中的第二个p张量是什么?
守则如下:
import torch.nn as nn
loss_func = nn.BCELoss()
loss = loss_func(torch.tensor([0.9]), torch.tensor([1.0]))
l2_lambda = 0.001
conv_layer = nn.Conv2d(in_channels=3,out_channels=5,kernel_size=5)
l2_penalty = l2_lambda * sum([(p**2).sum() for p in conv_layer.parameters()])
loss_with_penalty = loss + l2_penalty
linear_layer = nn.Linear(10, 16)
l2_penalty = l2_lambda * sum([(p**2).sum() for p in linear_layer.parameters()])
loss_with_penalty = loss + l2_penalty发布于 2022-07-17 10:03:29
首先,在PyTorch中正则化的首选方法是在优化器中使用weight_decay参数,重量衰减和L2正则化之间可能有一些小的差异,但是应该会得到类似的效果。
conv_layer.parameters()通常会输出超过2个conv层张量参数的迭代器-权重和偏差.您还可以运行conv_layer.named_parameters()来获得一个具有名称和键的dict,这将有助于您理解。
https://stackoverflow.com/questions/73010521
复制相似问题