交叉熵损失和NLL损失的区别

交叉熵损失和NLL损失之间的区别

总结:

交叉熵 = NLL + SOFTMAX Layer

NLL损失

torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')

常用于多分类(设为C类)问题,且可以对每个分类提供相应的权重,这对于非平衡数据集的处理非常有用。

输入的数据为一阶张量,数据为对数化的概率,并且nll损失需要一个softmax层,如果不想自己创建该层,则使用交叉熵损失。

输出的数据为在[0,C-1]范围内的一个类别的数据,如:0,1,……,C-1.但是也可以指定ignore_index,就可以忽视某个类。

计算的过程如下

例子:

#一阶的一个计算的例子
#指定了一个softmax层
import torch
m = torch.nn.LogSoftmax(dim = 1)
loss = torch.nn.NLLLoss()
input = torch.randn(3,5,requires_grad = True)
target = torch.tensor([1,0,4])
output = loss(m(input),target)
output.backward()

交叉熵损失

torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')

常用于多分类(设为C类)问题,且可以对每个分类提供相应的权重,这对于非平衡数据集的处理非常有用。

输入的数据是没有经过标准化的每一类的“打分”。

输出的数据为在[0,C-1]范围内的一个类别的数据,如:0,1,……,C-1.但是也可以指定ignore_index,就可以忽视某个类。

计算的过程如下

 

例子:

#一阶的一个计算的例子
import torch
loss2 = torch.nn.CrossEntropyLoss()
input = torch.randn(3,5,requires_grad = True)
target = torch.tensor([1,0,4])
output2 = loss2(m(input),target)
output2.backward()

pytorch关于NLL的文档

pytorch关于交叉熵的文档

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值