torch.nn.NLLLoss()
在各种深度学习框架中,我们最常用的损失函数就是交叉熵(torch.nn.CrossEntropyLoss),熵是用来描述一个系统的混乱程度,通过交叉熵我们就能够确定预测数据与真是数据之间的相近程度。交叉熵越小,表示数据越接近真实样本。
交叉熵计算公式:
就是我们预测的概率的对数与标签的乘积,当qk->1的时候,它的损失接近零。
nn.NLLLoss
官方文档中介绍称: nn.NLLLoss输入是一个对数概率向量和一个目标标签,它与nn.CrossEntropyLoss的关系可以描述为:softmax(x)+log(x)+nn.NLLLoss====>nn.CrossEntropyLoss
CrossEntropyLoss()=log_softmax() + NLLLoss()
其中softmax函数又称为归一化指数函数,它可以把一个多维向量压缩在(0,1)之间,并且它们的和为1.
计算公式:
示例代码
import math
z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
z_exp = [math.exp(i) for i in z]
print(z_exp) # Result: [2.72, 7.39, 20.09, 54.6, 2.72, 7.39, 20.09]
sum_z_exp = sum(z_exp)
print(sum_z_exp) # Result: 114.98
softmax = [round(i / sum_z_exp, 3) for i in z_exp]
print(softmax) # Result: [0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]
log_softmax
log_softmax是指在softmax函数的基础上,再进行一次log运算,此时结果有正有负,log函数的值域是负无穷到正无穷,当x在0—1之间的时候,log(x)值在负无穷到0之间。
nn.NLLLoss
此时,nn.NLLLoss的结果就是把上面的输出与Label对应的那个值拿出来,再去掉负号,再求均值。
代码示例:
import torch
input=torch.randn(3,3)
soft_input = torch.nn.Softmax(dim=0)
soft_input(input)
Out[20]:
tensor([[0.7284, 0.7364, 0.3343],[0.1565, 0.0365, 0.0408],[0.1150, 0.2270, 0.6250]])#对softmax结果取log
torch.log(soft_input(input))
Out[21]:
tensor([[-0.3168, -0.3059, -1.0958],[-1.8546, -3.3093, -3.1995],[-2.1625, -1.4827, -0.4701]])
假设标签是[0,1,2],第一行取第0个元素,第二行取第1个,第三行取第2个,去掉负号,即[0.3168,3.3093,0.4701],求平均值,就可以得到损失值。
(0.3168+3.3093+0.4701)/3
Out[22]: 1.3654000000000002#验证一下loss=torch.nn.NLLLoss()
target=torch.tensor([0,1,2])
loss(input,target)
Out[26]: tensor(0.1365)
nn.CrossEntropyLoss
loss=torch.nn.NLLLoss()
target=torch.tensor([0,1,2])
loss(input,target)
Out[26]: tensor(-0.1399)
loss =torch.nn.CrossEntropyLoss()
input = torch.tensor([[ 1.1879, 1.0780, 0.5312],[-0.3499, -1.9253, -1.5725],[-0.6578, -0.0987, 1.1570]])
target = torch.tensor([0,1,2])
loss(input,target)
Out[30]: tensor(0.1365)以上为全部实验验证两个loss函数之间的关系!!!
torch.nn.NLLLoss()相关推荐
- 深入理解Pytorch负对数似然函数(torch.nn.NLLLoss)和交叉熵损失函数(torch.nn.CrossEntropyLoss)
在看Pytorch的交叉熵损失函数torch.nn.CrossEntropyLoss官方文档介绍中,给出的表达式如下.不免有点疑惑为何交叉熵损失的表达式是这个样子的 loss ( y , clas ...
- Pytorch损失函数torch.nn.NLLLoss()详解
在各种深度学习框架中,我们最常用的损失函数就是交叉熵(torch.nn.CrossEntropyLoss),熵是用来描述一个系统的混乱程度,通过交叉熵我们就能够确定预测数据与真是数据之间的相近程度.交 ...
- torch.nn、(二)
参考 torch.nn.(二) - 云+社区 - 腾讯云 目录 Recurrent layers RNN LSTM GRU RNNCell LSTMCell GRUCell Transformer l ...
- [Pytorch系列-28]:神经网络基础 - torch.nn模块功能列表
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- torch.nn里的损失函数:MSE、BCE、BCEWithLogits、NLLLoss、CrossEntropyLoss的用法
1. nn.MSELoss() 模型的预测值与标签的L2距离.一般用于回归问题.之所以不用于分类问题,可能原因为:使用sigmoid之后,函数形式不是凸函数 ,不容易求解 ,容易进入局部最优. los ...
- [深度学习] Pytorch nn.CrossEntropyLoss()和nn.NLLLoss() 区别
nn.NLLLoss()的参数是经过logsoftmax加工的,而CrossEntropyLoss的是原始输出数据 target = torch.tensor([1, 2]) entropy_out ...
- PyTorch之torch.nn.CrossEntropyLoss()
简介 信息熵: 按照真实分布p来衡量识别一个样本所需的编码长度的期望,即平均编码长度 交叉熵: 使用拟合分布q来表示来自真实分布p的编码长度的期望,即平均编码长度 多分类任务中的交叉熵损失函数 代码 ...
- Pytorch踩坑记之交叉熵(nn.CrossEntropy,nn.NLLLoss,nn.BCELoss的区别和使用)
目录 nn.Softmax和nn.LogSoftmax nn.NLLLoss nn.CrossEntropy nn.BCELoss 总结 在Pytorch中的交叉熵函数的血泪史要从nn.CrossEn ...
- torch.nn、(一)
参考 torch.nn.(一) - 云+社区 - 腾讯云 目录 torch.nn Parameters Containers Module Sequential ModuleList ModuleDi ...
- KLD Loss( tf.nn.softmax, torch.nn.functional.softmax, log_softmax, kl_div) 计算技巧(一)
最近在比较不同模型的性能,发现虽然文献中使用的相同的指标,比如KLD.但是数据的处理方式却存在着差异,这会导致最后的数据并不具有直接可比性. 这里记录下,其中的一些值得记住的细节.主要涉及的API包括 ...
最新文章
- 如何制作python代码_如何使用50行Python代码制作一个计算器
- ECMAScript5 Object的新属性方法
- 入门第十一课 Python语句的嵌套
- 一文掌握Python集合的语法与应用
- Docker学习总结(18)——阿里超大规模Docker化之路
- UVA12439 February 29【日期计算】
- 解决position:fixed抖动的问题
- 2019CVPR论文以及源码 awesome-object-proposals
- 基于UNITY引擎开发的游戏源码修改方法
- python 自动换ip_python实现自动更换ip的方法
- extern小结(转)
- 404 找不到页面_找不到404页面设计,如何创建较大的错误页面
- Curator的使用
- 什么是运维?运维开发需要做哪些事情?
- 数据库常用命令及关键字
- 坚持一年背英语单词的总结
- 版本动态 | Apache Linkis(Incubating) 计算中间件1.1.2 版本发布
- 出现身份验证错误。 要求的函数不受支持, 远程计算机 这可能是由于CredSSP加密数据库修正
- 别被漫画骗了..棋魂真正的结局是....
- xshell打开多个窗口_打开软件太多,窗口用起来一团糟?让它来帮你管理:Groupy...
热门文章
- java 与 c# 3des 加解密
- 老外写的比较好用的splitter控件
- 去掉内容中的所有全部html标签。
- 04.spring boot配置文件--yml
- [2018.10.31 T3] 玩
- BZOJ3994[SDOI2015] 约数个数和
- vue : 无法加载文件 D:\Program Files\nodejs\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsof t.com/fwlin
- 华为平板m5鸿蒙,华为平板M5系列发布:搭载麒麟960 售价2088元起
- 不同平台安装python的方式一样吗_Python软件的正确安装方式
- python3.7安装opencv4.1_VS2019+python3.7+opencv4.1+tensorflow1.13配置详解