(这里是火炬初学者)
我想将L1正则化器添加到ReLU的激活输出中。更一般而言,如何仅将正则化器添加到网络中的特定层?
这篇文章可能与以下内容有关: 在PyTorch中添加L1 /L2正则化? 但是,要么不相关,要么我不明白答案:
它指的是在优化中应用的L2正则化器,这是另一回事。换句话说,如果总的期望损失是
crossentropy + lambda1*L1(layer1) + lambda2*L1(layer2) + ...
我相信提供给torch.optim.Adagrad的参数仅适用于交叉熵损失。或将其应用于网络中的所有参数(权重)。但是无论如何,似乎不允许对单个激活层应用正则化器,并且不提供L1损失。
另一个相关主题是nn.modules.loss,其中包括L1Loss()。从文档中,我还不了解如何使用它。
最后,有一个模块https://github.com/pytorch/pytorch/blob/master/torch/legacy/nn/L1Penalty.py,它似乎最接近目标,但被称为“传统”。这是为什么?
这是您的操作方式:
loss
变量将是输出wrt目标的交叉熵损失与L1惩罚的总和。这是一个示例代码
import torch
from torch.autograd import Variable
from torch.nn import functional as F
class MLP(torch.nn.Module):
def __init__(self):
super(MLP, self).__init__()
self.linear1 = torch.nn.Linear(128, 32)
self.linear2 = torch.nn.Linear(32, 16)
self.linear3 = torch.nn.Linear(16, 2)
def forward(self, x):
layer1_out = F.relu(self.linear1(x))
layer2_out = F.relu(self.linear2(layer1_out))
out = self.linear3(layer2_out)
return out, layer1_out, layer2_out
batchsize = 4
lambda1, lambda2 = 0.5, 0.01
model = MLP()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)
# usually following code is looped over all batches
# but let's just do a dummy batch for brevity
inputs = Variable(torch.rand(batchsize, 128))
targets = Variable(torch.ones(batchsize).long())
optimizer.zero_grad()
outputs, layer1_out, layer2_out = model(inputs)
cross_entropy_loss = F.cross_entropy(outputs, targets)
all_linear1_params = torch.cat([x.view(-1) for x in model.linear1.parameters()])
all_linear2_params = torch.cat([x.view(-1) for x in model.linear2.parameters()])
l1_regularization = lambda1 * torch.norm(all_linear1_params, 1)
l2_regularization = lambda2 * torch.norm(all_linear2_params, 2)
loss = cross_entropy_loss + l1_regularization + l2_regularization
loss.backward()
optimizer.step()
问题内容: 我在使用TensorFlow实现的许多可用神经网络代码中发现,正则化项通常是通过在损耗值上手动添加一个附加项来实现的。 我的问题是: 是否有比手动进行更优雅或推荐的正规化方法? 我也发现有一个争论。应该如何使用?根据我的观察,如果我们向其传递正则化器(例如,将计算表示正则化项的张量并将其添加到名为的图集合中,该集合是否会被TensorFlow自动使用(例如,优化器在训练时使用)?期望我
本文向大家介绍L1、L2正则化相关面试题,主要包含被问及L1、L2正则化时的应答技巧和注意事项,需要的朋友参考一下 https://blog.csdn.net/jinping_shi/article/details/52433975 L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L
本文向大家介绍pytorch 实现L2和L1正则化regularization的操作,包括了pytorch 实现L2和L1正则化regularization的操作的使用技巧和注意事项,需要的朋友参考一下 1.torch.optim优化器实现L2正则化 torch.optim集成了很多优化器,如SGD,Adadelta,Adam,Adagrad,RMSprop等,这些优化器自带的一个参数weight
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。 Sigmoid 也成为 S 形函数,取值范围为 (0,1)。Sigmoid 将一个实数映射到 (0,1) 的区间,可以用来做二分类。Sigmoid 在特征相差比较复杂或是相差不是特别大时效果比较好。 sigmoid 缺点: 激活函数计算量大(指数运算),反向传播求误差梯度时,求导
问题内容: 我正在尝试在MVC中向我的引导导航栏添加“活动”类,但是在编写时,以下内容未显示活动类: 这可以解决看起来像格式正确的类,但是不起作用: 在Bootstrap文档中,它指出不应在导航栏中使用“a”标签,但是我认为以上是将类添加到Html.ActionLink的正确方法。我还有另一种(整洁)的方式可以做到这一点吗? 问题答案: 在Bootstrap中,需要将类应用于元素,而不是。 基于活
本文向大家介绍L1和L2正则化的区别相关面试题,主要包含被问及L1和L2正则化的区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: L1是模型各个参数的绝对值之和,L2为各个参数平方和的开方值。L1更趋向于产生少量的特征,其它特征为0,最优的参数值很大概率出现在坐标轴上,从而导致产生稀疏的权重矩阵,而L2会选择更多的矩阵,但是这些矩阵趋向于0。
问题内容: 我正在尝试将Integer数组添加到Set中,如下所示: 我收到以下错误提示, 其次,我也尝试按照以下步骤进行操作,但仍然出现错误, 如何在Java中正确地将Integer数组添加到Set中?谢谢。 问题答案: 您需要使用包装器类型才能使用 或 手动添加元素,例如 最后,如果您需要保留插入顺序,则可以使用。
本文向大家介绍L1和L2正则相关面试题,主要包含被问及L1和L2正则时的应答技巧和注意事项,需要的朋友参考一下 参考回答: L范数(L1 norm)是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。比如 向量A=[1,-1,3],那么A的L1范数为 |1|+|-1|+|3|.简单总结一下就是: L1范数: 为x向量各个元素绝对值之和。 L2范数