pytorch中F.cross_entropy和F.nll_loss的区别

【pytorch笔记】损失函数nll_loss 本文主要讲解在使用pytorch中对损失函数`nll_loss`的一些理解与思考。 阅读详情
AI摘要

本文详细介绍了PyTorch中CrossEntropyLoss和NLLLoss的区别,主要在于输入处理。CrossEntropyLoss会先进行log_softmax操作,然后传给NLLLoss,而NLLLoss直接接受对数概率向量。通过实验验证,使用nll_loss手动实现cross_entropy得到的结果与内置函数一致,证实了这一区别。

搞懂函数的区别的最好方法就是产看函数的底层实现。

首先可以在pytorch中分别点击进入函数内部,看他们的具体实现。
1、F.cross_entropy的内部实现是:
在这里插入图片描述
并且cross_entropy函数的返回值是:在这里插入图片描述
2、F.nll_loss的内部实现是:
在这里插入图片描述
3、结论
这里先上结论。这两种损失的区别在于input上的操作,对于cross_entropy来说,他首先会对input进行log_softmax操作,然后再将log_softmax(input)的结果送入nll_loss;而nll_loss的input就是input。
NLLLoss 的 输入 是一个对数(log)概率(softmax)向量和一个目标标签. 它不会为我们计算对数概率. 适合网络的最后一层是log_softmax.
损失函数 nn.CrossEntropyLoss() 与 NLLLoss() 相同, 唯一的不同是它为我们去做 log_softmax.

4、实验验证

input = torch.tensor([[[[0.5546, 0.1304, 0.9288],
                        [0.6879, 0.3553, 0.9984],
                        [0.1474, 0.6745, 0.8948]],
		               [[0.8524, 0.2278, 0.6476],
                        [0.6203, 0.6977, 0.3352],
                        [0.4946, 0.4613, 0.6882]]]])
target = torch.tensor([[[0, 0, 0],
                       [0, 0, 0],
                       [0, 0, 1]]])
# cross_entropy的实现               
loss = F.cross_entropy(input, target)
print(loss)

# 利用nll_loss实现cross_entropy
input = F.softmax(input, dim=1)
input = torch.log(input)
# input = F.log_softmax(input, dim=1)  # 上面的两行代码和这个是等价的
loss = F.nll_loss(input, target)
print(loss)

输出:
在这里插入图片描述

5、总结:
利用nll_loss实现的cross_entropy和pytorch中自带的cross_entropy的结果一致,证明函数的却别仅在input上的处理,F.cross_entropy也是基于F.nll_loss实现的。

注:如有错误还请指出!

手算NLP损失值:从CrossEntropy原理到PyTorch实现 损失函数是深度学习模型优化的核心度量,其本质是量化预测分布与真实标签之间的差异。在自然语言处理(NLP)中,交叉熵损失(CrossEntropyLoss)因契合分类任务的概率建模假设而成为标配,它惩罚的是模型对错误答案的‘过度自信’,而非简单数值偏差。理解其数学原理——包括LogSoftmax与负对数似然(NLL)的组合、label索引机制、reduction方式及padding掩码处理——直接关系到loss异常的快速定位与调试。本文聚焦文本分类、序列标注等典型NLP任务,结合PyTorch底层实现,详解如 阅读详情

相关推荐

FPGA时序约束:从时钟树到数据路径的深度解析与优化策略

本文深入解析FPGA时序约束的核心技术与优化策略,涵盖时钟树结构分析、时序报告解读和数据路径优化。重点探讨Vivado工具中的时序约束方法,包括时钟定义、异常约束和物理优化,帮助工程师掌握寄存器级时序分析和系统级协同设计,实现高性能FPGA设计。

u5v6w7的博客 652

nn.CrossEntropyLoss与F.nll_loss

F.nll_loss计算方式是下式,在函数内部不含有提前使用softmax转化的部分; nn.CrossEntropyLoss内部先将输出使用softmax方式转化为概率的形式,后使用F.nll_loss函数计算交叉熵。 也就是: CrossEntropyLoss()=log_softmax() + NLLLoss() 注意: 两个函数的输入分别是input和target, input是网络预测的输出,形状为(batch_size, pro),其中pro为class的个数; target是标签,不

YJYS_ZHX的博客 8204

昇腾Ascend310b部署deepseek-r1-7b的学习记录

9.鲲鹏服务器+昇腾卡(Atlas 300I pro)搭建DeepSeek-R1-Distill-Qwen-7B(自己存档详细版)5.如何使用昇腾Ascend 300I Pro 310P芯片 单卡运行DeepSeek-R1-Distilled-Qwen-7B。6.鲲鹏服务器+昇腾卡(Atlas 300I pro)搭建DeepSeek-R1-Distill-Qwen-7B。7.鲲鹏+昇腾部署DeepSeek-R1-Distill-Qwen-32B+Open-webui。

maken 2367

F.cross_entropy、logsoftmax、nll_loss详解

F.cross_enropy的实际计算方法探索

weixin_40198079的博客 5397

赛灵思KV260视觉AI套件实战:从模型到边缘部署全流程解析

边缘计算与AI推理加速是当前嵌入式系统和物联网领域的关键技术。其核心原理在于将计算任务从云端下沉至网络边缘的设备端,通过专用硬件加速器(如FPGA、ASIC或NPU)执行神经网络推理,从而显著降低延迟、减少带宽消耗并提升数据隐私性。这一技术为实时性要求高的应用场景(如工业视觉检测、智能安防、自动驾驶等)提供了关键支撑。以赛灵思(Xilinx)的Zynq UltraScale+ MPSoC平台为例,其集成了ARM处理器与可编程逻辑,通过预置的深度学习处理器单元(DPU)为卷积神经网络提供高效INT8加速。开发

weixin_28719225的博客 325

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程)

本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。

weixin_29305313的博客 502

PyTorch-损失函数-NLLLoss

常用于多分类任务,NLLLoss 函数输入 input 之前,需要对 input 进行 log_softmax 处理,即将 input 转换成概率分布的形式,并且取对数,底数为 e class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='...

花开花落,人走茶凉 3万+

西门子 G120 变频器报文

G120报文

mmxxoo_xxmmp的博客 8064

交叉熵损失函数和NLL_loss

损失函数|交叉熵损失函数 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/35709485

yimenren的博客 4432

宇树GO2-YOLOv5在Jetson Orin上的部署避坑实践

本文详细记录了在宇树GO2四足机器人搭载的Jetson Orin平台上部署YOLOv5目标检测模型的完整实践过程。文章重点分享了从ARM架构认知、网络连接解决方案、Archiconda环境搭建、PyTorch版本精准匹配到依赖安装与性能验证的核心步骤与避坑指南,旨在帮助开发者高效完成边缘计算环境下的算法部署。

app77的博客 668

多思计组实验实验六 微程序控制器实验

实验六 微程序控制器实验

qq_53089329的博客 3780

CrossEntropyLoss 和 cross_entropy

在使用Pytorch时经常碰见这些函数cross_entropy,CrossEntropyLoss, log_softmax, softmax。看得我头大,所以整理本文以备日后查阅。 首先要知道上面提到的这些函数一部分是来自于torch.nn,而另一部分则来自于torch.nn.functional(常缩写为F)。二者函数的区别可参见知乎:torch.nn和funtional函数区别是什么? 下面是对与cross entropy有关的函数做的总结: torch.nn torch.nn.fu..

咖乐部 3766

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 300

Pytorch损失函数cross_entropy、binary_cross_entropy和binary_cross_entropy_with_logits的区别

在做分类问题时我们经常会遇到这几个交叉熵函数: cross_entropy、binary_cross_entropy和binary_cross_entropy_with_logits。 那么他们有什么区别呢?下面我们就来探讨一下: 1.torch.nn.functional.cross_entropy def cross_entropy(input, target, weight=None, size_average=None, ignore_index=-100, re

Joker 007的博客 6184

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

F.nll_loss与F.cross_entropy(loss为nan时如何调整)

在用vgg16

bb_sy_w的博客 3704

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

nll_loss 和 cross_entropy

nll_loss torhc.nn.functional中给出的关于nll_loss的一个样例 target: 数值 <= C-1, 一般可以看作一个一维列表,存放的是真实类别编号 先经过softmax,再经过log,最后再使用nll_loss # input is of size N x C = 3 x 5 input = torch.randn(3, 5, requires_grad=True) # each element in target has to have 0 <= value

weixin_42727538的博客 1987

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【pytorch】使用numpy实现pytorch的softmax函数与cross_entropy函数

公式 Softmax(xi)=exp⁡(xi)∑jexp⁡(xj) {Softmax}(x_{i}) = \frac{\exp(x_i)}{\sum_j \exp(x_j)} Softmax(xi​)=∑j​exp(xj​)exp(xi​)​ 结果一致 从源码上来看,torch.nn.functional.F.softmax实际上调用的是Tensor自身的softmax函数 公式 Log_softmax(xi)=lnexp⁡(xi)∑jexp⁡(xj) {Log\_softmax}(x_{i}) = ln

安安爸Chris的专栏 4951

F.cross_entropy和F.nll_loss交叉熵以

搞懂函数的区别的最好方法就是产看函数的底层实现。 首先可以在pytorch中分别点击进入函数内部,看他们的具体实现。 1、F.cross_entropy的内部实现是: 并且cross_entropy函数的返回值是: 2、F.nll_loss的内部实现是: 3、结论 这里先上结论...

weixin_44523062的博客 1433

AI技术总监带你吃透大模型|03|大模型为什么用Cross-Entropy?终于把Logits、Softmax、Loss讲明白

本讲揭示语言模型如何将原始输出(logits)转化为概率,并通过损失函数衡量预测质量。核心链路为:logits → Softmax → 条件概率 → -log(p) → NLL Loss。模型先“报分”,再归一化为概率,真实答案的负对数似然即为损失,最终通过梯度反向传播优化参数。全程以问题驱动,结合代码与直觉,打通从数学表达到工程实现的认知闭环。

c5dnuser的博客 300

【pytorch】Softmax,LogSoftmax,CrossEntropyLoss,NLLLoss,F.cross_entropy, F.binary_cross_entropy傻傻分不清楚?

在实际应用中,如果发现模型训练过程中出现数值稳定性问题,或者需要加速训练过程,使用 LogSoftmax + NLLLoss 可能是一种较优的选择。在计算损失时,使用 NLLLoss 计算对数似然损失需要进行一次对数运算,而 CrossEntropyLoss 需要进行两次对数运算。在输入数值较大时,使用 Softmax 会导致溢出,而 LogSoftmax 则不会。而 LogSoftmax 之后,得到预测概率分布的对数。可以看到,这两种搭配方法计算的结果是一致的。,负对数似然损失就是将两个分布。

x66ccff 1366

pytorch查看loss曲线_Pytorch里的CrossEntropyLoss详解

在使用Pytorch时经常碰见这些函数cross_entropy,CrossEntropyLoss, log_softmax, softmax。看得我头大,所以整理本文以备日后查阅。首先要知道上面提到的这些函数一部分是来自于torch.nn,而另一部分则来自于torch.nn.functional(常缩写为F)。二者函数的区别可参见 知乎:torch.nn和funtional函数区别是什么?下面是...

weixin_39932838的博客 454

pytorch 绘制多个算法loss_Pytorch里的CrossEntropyLoss详解

在使用Pytorch时经常碰见这些函数cross_entropy,CrossEntropyLoss, log_softmax, softmax。看得我头大,所以整理本文以备日后查阅。首先要知道上面提到的这些函数一部分是来自于torch.nn,而另一部分则来自于torch.nn.functional(常缩写为F)。二者函数的区别可参见 知乎:torch.nn和funtional函数区别是什么?下面是...

weixin_29094539的博客 249

Pytorch里的CrossEntropyLoss详解

在使用Pytorch时经常碰见这些函数cross_entropy,CrossEntropyLoss, log_softmax, softmax。看得我头大,所以整理本文以备日后查阅。 首先要知道上面提到的这些函数一部分是来自于torch.nn,而另一部分则来自于torch.nn.functional(常缩写为F)。二者函数的区别可参见 知乎:torch.nn和funtional函数区...

aiwanghuan5017的博客 2633

tensorflow/keras与pytorch的交叉熵对比

pytorch交叉熵损失 BCELoss vs BCEWithLogitsLoss bceloss前面需要经过sigmoid BCEWithLogitsLoss就是把Sigmoid-BCELoss合成一步 input = torch.tensor(np.arange(3)/3).reshape(3,1) input2 = torch.nn.Sigmoid()(input) loss = torch.nn.BCELoss() target = torch.tensor([[0],[1],[1]]).

Jemila 1944

深度学习优化策略---Label Smoothing

label smooth的pytorch实现以及其公式推导(虽然短但是细)(损失函数的公式推倒简明易懂)

xys430381_1的专栏 973
上一篇: 一文搞懂F.cross_entropy中的weight参数
下一篇: 一文搞懂F.binary_cross_entropy以及weight参数
fpan98
博客等级 码龄9年 27粉丝 6原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值