Pytorch中损失函数 NLLLOSS 和 CROSSENTROPYLOSS 的区别

NLLLOSS 是 negative log likelihood loss 负对数似然损失函数,CROSSENTROPYLOSS 是交叉熵损失函数,它们都是用于多分类任务的损失函数,正如我在笔记中提到的,它们实际上是一样的,在 Pytorch 中这两者的区别就只在于接收的输入不同:

torch.nn.functional.cross_entropy 将 logits 作为输入(内部自动实现 log_softmax)
torch.nn.functional.nll_loss 将 log-probabilities (log-softmax) 作为输入

logits 即 log_softmax 层的输入,log-probabilities 即 Softmax 层的输出,也就是说:
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

实际代码的演示如下:

1、假设 Softmax 层的输入矩阵为 Z,其中每一行是一个训练示例:
在这里插入图片描述
2、将它们经过 Softmax 层,得到输出矩阵 smax
在这里插入图片描述
3、nll_loss 的输入为 smax 的对数,即 log_softmax;而 cross_entropy 的输入为 Z

在这里插入图片描述
示意图如下:

在这里插入图片描述
对于二分类的情况,即二元交叉熵 binary_cross_entropy 也是有两种实现:BCEWithLogitsLoss 和 BCELoss,两者区别在于接收的输入不同。具体可以看这篇博客

在这里插入图片描述
在这里插入图片描述
正如我的笔记中写到的,PyTorch 有两种 API:函数式方法(functional)和面向对象方法(object-oriented)。面向对象方法意味着它们被实现为 Python 类,我们必须实例化对象才能使用它们。如果我们必须跟踪内部状态(如模型权重和梯度),那么面向对象的范例就很棒。

然而,对于不需要内部状态的东西,比如损失函数,我们也可以使用函数式 API,这样我们就不必再去实例化损失了。换句话说,PyTorch 的功能 API 通过 torch.nn.functional 子模块提供没有内部状态的实现。这里我们使用的也正是函数式的 API。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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损失函数 NLLLOSSCROSSENTROPYLOSS区别](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、付费专栏及课程。

余额充值