pytorch中的nn.CrossEntropyLoss()损失

在使用pytorch深度学习框架,计算分类损失时经常会遇到这么一个函数nn.CrossEntropyLoss(),该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体几类)训练的时候是非常有用的,如下我将对该函数的原理使用代码和实例进行分析。
    
首先输入是size是(minibatch,C)。这里的C是类别数。损失函数的计算如下:
在这里插入图片描述
损失函数中也有权重weight参数设置,若设置权重,则公式为:
在这里插入图片描述
注意这里的标签值class,并不参与直接计算,而是作为一个索引,索引对象才为实际类别。

举个栗子,我们一共有5种类别,批量大小为1(为了好计算),那么输入size为(1,3),具体值为torch.Tensor([[-0.7715, -0.6205,-0.2562]])。标签值为target = torch.tensor([0]),这里标签值为0,表示属于第0类。loss计算如下:

举个栗子,我们一共有5个类别,batch_size =2

import torch
import torch.nn as nn
import math

entroy=nn.CrossEntropyLoss()
input=torch.tensor([[ 0.0043, -0.0174, -0.0153,  0.0273,  0.0116],
        [-0.0182, -0.0238, -0.0167,  0.0360,  0.0207]])
target = torch.tensor([1, 2])
output = entroy(input, target)
print(output)

计算公式为:

loss1 = -x[1]+log(exp(x[0])+exp(x[1])+exp(x[2])+exp(x[3])+exp(x[4]))
loss2 = -x[2]+log(exp(x[0])+exp(x[1])+exp(x[2])+exp(x[3])+exp(x[4]))

则将数值代入以上计算公式得:

loss1 = -0.0174+log(exp(0.0043)+exp(-0.0174)+exp(-0.0153)+exp(0.0273)+exp(0.0116))
loss2 = -0.0167+log(exp(-0.0182)+exp(-0.0238)+exp(-0.0167)+exp(0.0360)+exp(0.0207))

总loss为

loss = (loss1 + loss2) / 2 = 1.6276
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值