pytorch的几种常用loss

1.sigmoid

这个可以将输入归一化到0~1之间
该函数也叫Logistic函数
优点:平滑、易于求导。
缺点:激活函数计算量大,反向传播求误差梯度时,求导涉及除法;反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。
sigmoid函数图片
计算公式如下图所示:
在这里插入图片描述

2.softmax

softmax也是一个归一化函数,是归一化指数函数,其公式如下图所示
在这里插入图片描述
函数的输入是从K个不同的线性函数得到的结果,而样本向量 x 属于第 j 个分类的概率为:
在这里插入图片描述
对了,需要注意,如果在pytorch中使用该函数,需要将除了batch之外的flatten打平

3.softmax2d

同softmax原理一样,不同的是,这是二维的softmax,同一channel的数值相加为1,而不是像softmax一样,达成一个维度,改维度内的所有数值相加为1.
如下图为例:
在这里插入图片描述

4.BCELoss

这个loss跟pytorch中的nn.functional.binary_cross_entropy是同样的,一摸一样的loss
计算公式如下图所示:
在这里插入图片描述
其中y代表label,x代表input
这个是W*H中的逐个像素的计算,最后累加求平均(也可以选择是求和)

5.BCEwithlogitsLoss

这个就是在BCELoss()的基础上加了一个sigmoid,注意只在输入上加了sigmoid
BCEwithlogitsLoss=BCELoss(sigmoid(input),target)

6.CrossEntropyLoss

这个只适用于确定分类的分类,某些情况下不适合:譬如说,关键点检测的分割网络中,一般会在关键点周围造一个高斯核,对应到channel当中就会表示其属于每个分类的置信度,但对于核周边的像素点,我们不确定是否将其归纳到某一分类,如果使用CrossEntropyLoss就太过确定了(不存在高斯核,只有int的分类标签),其target为3D的Tensor,格式为[batch,samples(一个样本中待分类的像素的个数或者对应的维度大小)],数值为对应的类别(应该取哪一个channel的数值计算loss),以下举例说明:
第一步:生成输入和target
在这里插入图片描述
在这里插入图片描述
第二步:计算softmax
在这里插入图片描述
第三步:计算log:
在这里插入图片描述
第四步:
计算NLL Loss:
在这里插入图片描述
这一步解释一下,因为target为两个0,代表都是0分类,所以都是将channel_0的元素取出来去掉符号相加除以2,这就是NLLLoss()完成的事情
所以,总结来说,CrossEntropyLoss的流程为:
NLLLoss(log(softmax(input)),target)
其执行了softmax,log,NLLLoss()
**

7.NLLLoss()

**
通过以上的介绍,就可以知道NLLLoss()的计算过程

关于每个函数的数学意义,将在下一篇博客中进行介绍。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值