做定制旅游最好的网站,大连免费营销型建站网络推广,昆明网站建设论坛,全国工程建设行业优秀网站一、L1、L2 loss (分割中不常用#xff0c;主要用于回归问题)L1 LossL1 Loss 主要用来计算 input x 和 target y 的逐元素间差值的平均绝对值.pytorch表示为#xff1a;torch.nn.functional.l1_loss(input, target, size_averageTrue)size_average主要是考虑到minibatch的情况…一、L1、L2 loss (分割中不常用主要用于回归问题)L1 LossL1 Loss 主要用来计算 input x 和 target y 的逐元素间差值的平均绝对值.pytorch表示为torch.nn.functional.l1_loss(input, target, size_averageTrue)size_average主要是考虑到minibatch的情况下需要求平均。loss nn.L1Loss()
input torch.randn(3, 5, requires_gradTrue)
target torch.randn(3, 5)
output loss(input, target) #是一个标量
output.backward()
# 求这个标量loss对每个input元素的梯度 可以用input.grad显示出来L2 损失MSE lossL2 LossL2 lossL2 Loss 主要用来计算 input x 和 target y 的逐元素间差值平方的平均值.pytorch中表示为torch.nn.functional.mse_loss(input, target, size_averageTrue)具体应用不再介绍。二、交叉熵损失首先介绍一下交叉熵损失函数的由来其中将介绍为什么交叉熵可以用于分类或分割以及在one-hot多类别分类以及0-1编码二分类之间的区别1、从KL散度到交叉熵损失如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x)我们可以使用 KL 散度Kullback-Leibler (KL) divergence来衡量这两个分布的差异变形可以得到等式的前一部分恰巧就是p的熵等式的后一部分就是交叉熵在一般的机器学习任务中我们需要评估label和predicts之间的差距上式中P(x)代表label、q(x)代表predicts由于label本身的熵是不变的因此我们只需要关注后面的交叉熵就可以了。所以一般机器学习任务中直接使用交叉熵作为loss用于评估模型。2. 多分类任务中的one-hot编码下的交叉熵当然one-hot也可以用于二分类首先介绍softmax操作如图softmax的输出是一种归一化的分类概率它将输出z首先经过指数级别进行差别放大之后归一化到0到1之间。可以让大的数变得更大小的数变得更小最终所有的值归一化到0、1之间。在数学上直观上看如何知道softmax的输出和真实label之间的差距呢计算交叉熵损失计算出来的y和y hat都是两个vector和都是1并且都相同的维度可以理解为两个离散的概率分布。这样就可以衡量softmax输出的概率分布和label的one-hot分布之间的差距。使用交叉熵。one-hot下的交叉熵表示为上面z符号用x表示了哈因为除了label位置对应的y hat为1其余均是0最终只剩一项 ,而y label的值就是换个角度对于这个loss我们希望的是x label越来越大其他x项越来越小loss得到之后更新都是原有的值减去lr*梯度需要类别x label对应的梯度是负值其他对应的梯度为正值。从loss可以很容易看出来哈pytorch中与Cross Entropy相关的loss Functionone-hot形式CrossEntropyLoss: combines LogSoftMax and NLLLoss in one single class也就是说我们的网络不需要在最后一层加任何输出层该loss Function为我们打包好了NLLLoss: 也就是negative log likelihood loss如果需要得到log分布则需要在网络的最后一层加上LogSoftmaxNLLLoss2d: 二维的negative log likelihood loss多用于分割问题目前已经整合到NLLLoss3. 二分类0-1编码output的编码不是one-hot只是0代表1类1代表一类真实的分布就是0和1预测的分布就是如果是1的话就是f(x),0的话自然就是1-f(x);我们希望这个loss损失达到最大值将上式进行归纳本质上就是交叉熵在伯努利分布上的表现形式即二分类用的交叉熵用的时候需要在该层前面加上 Sigmoid 函数。将输出值变到0到1之间