Pytorch中交叉熵损失函数 nn.CrossEntropyLoss()计算过程

pytorch的交叉熵损失函数是如何计算outputs和 labels之间的损失的?

对于一个分类问题的CNN模型,最后一层的代码一般如下:

nn.Linear(2048, num_classes)

然后计算一次迭代损失的代码一般如下:

loss_function = nn.CrossEntropyLoss()

outputs = net(images.to(device))

loss = loss_function(outputs, labels.to(device))

1、假设条件:

假设batsize=4,我们的任务是一个5分类的,即num_classes=5,labels=【人,猫,狗,兔,鸟】

但是我们做数据集的时候,一般用[0,1,2,3,4]来代替,即0代表人,1代表猫....,这些数字代表了onehot中元素为1的位置

2、output

那么神经网络的output形状为【4x5】4行5列。(以一张图片为一行,一共4行。每个图片可能的预测结果有5个,所以有5列)

由于网络直接输出的output不是概率,在计算损失时,会首先将output以行为单位计算Softmax,即被预测为每个类别的概率,使得它相加为1,,然后再取Log,

3、label

label会被变成onehot形式,假设这四个图片标签分别为:人,猫,狗,鸟

那么各自对应的onehot分别为[[1,0,0,0,0],

                                                [0,1,0,0,0],

                                                [0,0,1,0,0],

                                                [0,0,0,0,1]],组成一个和output形状一样的tensor格式的标签

4、loss

最后计算onehot中元素为1的位置对output中的数字取logsoftmax后,求和,取反,再求均值即为最后的交叉熵损失

如果使用NLLLoss需要将网络的输出先经过LogSoftmax,CrossEntropyLoss = LogSoftmax 和 NLLLoss,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值