pytorch中CrossEntropyLoss和NLLLoss的区别与联系

pytorch中CrossEntropyLoss和NLLLoss的区别与联系

CrossEntropyLoss和NLLLoss主要是用在多分类问题的损失函数,他们两个既有不同,也有不浅的联系。先分别看一下:

CrossEntropyLoss

称为交叉熵损失函数,主要的计算公式为:
l o s s ( x , c l a s s ) = − l o g ( e c l a s s ∑ j ( e x [ j ] ) ) loss(x,class)=-log(\frac{e^{class}}{\sum_j(e^{x[j]})}) loss(x,class)=log(j(ex[j])eclass)
其中 e c l a s s e^{class} eclass表示某个输出的指数, ∑ j ( e x [ j ] ) \sum_j(e^{x[j]}) j(ex[j])表示所有输出的指数的累加,指数的使用保证操作后的值大于0,除以累加和保证了所有值加起来和为1
具体的官方文档:
在这里插入图片描述
在这里插入图片描述

NLLLoss

这个损失函数的全称为负对数似然损失(The negative log likelihood loss),具体的公式如下:
l ( x , y ) = L = { l 1 , l 2 , . . . , l N } T , l n = − W y n X n , y n , W c = w e i g h t [ c ] ∗ 1 l(x,y)=L=\{l_1,l_2,...,l_N\}^T,l_n = -W_{y_n}X_{n,y_n},W_c = weight[c]*1 l(x,y)=L={l1,l2,...,lN}T,ln=WynXn,yn,Wc=weight[c]1
其中X为输入,W为权重,上述公式为reduction=none时的损失函数计算。 W y n W_{y_n} Wyn就表示对应于 y n y_n yn类的权重,X也是同样的道理,N为batch size的大小。
f ( n ) = { ∑ n = 1 N 1 ∑ n = 1 N W y n , if  r e d u c t i o n  = mean ∑ n = 1 N l n , if  r e d u c t i o n  = sum f(n)= \begin{cases} \sum_{n=1}^N\frac{1}{\sum_{n=1}^NW_{y_n}}, & \text {if $reduction$ = mean} \\ \sum_{n=1}^Nl_n, & \text{if $reduction$ = sum} \end{cases} f(n)={n=1Nn=1NWyn1,n=1Nln,if reduction = meanif reduction = sum
官方的文档为:
在这里插入图片描述
在这里插入图片描述

区别

对于CrossEntropyLoss来说网络的最后一层线性层的输出可以直接作为该损失函数的输入。
对于NLLLoss来说网络的最后一层线性层的输入不能直接使用,需要额外加一层.LogSoftmax来对线性的输出做如下操作:
l o g ( 1 1 + e ( − X ) ) log(\frac{{1}}{1+e^{(-X)}}) log(1+e(X)1)
经过LogSoftmax后的输出作为NLLLoss的输入。

联系

从功能实现来说:
C r o s s E n t r o p y L o s s = L o g S o f t m a x 层 + N L L L o s s CrossEntropyLoss = LogSoftmax层 + NLLLoss CrossEntropyLoss=LogSoftmax+NLLLoss

在代码编写使用中的区别

在这里插入图片描述在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nn.NLLLoss()和nn.CrossEntropyLoss()是用于多分类任务的损失函数,在PyTorch它们实际上是相同的。唯一的区别在于它们接收的输入不同: - nn.NLLLoss()的输入是一个对数概率向量和一个目标标签,它不会为我们计算对数概率。适合网络的最后一层是log_softmax损失函数的情况。 - nn.CrossEntropyLoss()的输入是一个预测值和一个目标标签,它会为我们自动计算预测值的对数概率,即先做softmax,再做log处理。在实际使用,两者可以互换使用,效果是一样的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [paddlenll_loss()与CrossEntropyLoss()损失函数区别](https://blog.csdn.net/weixin_43848436/article/details/115448659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Pytorch损失函数 NLLLOSS 和 CROSSENTROPYLOSS区别](https://blog.csdn.net/cnhwl/article/details/125518586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值