Pytorch中NLLLoss

NLLLoss
首先,简单地谈下我对NLLLoss损失函数的理解。
经过上面的计算我们知道, 计算出来的值范围在 ,值的含义表示对应类别的概率。也就是说,每行中最接近于 的值对应的类别,就是该图片所属概率最大的类别。这时,目标是最大化概率。但在机器学习中,通常最小化某个函数值,因此,对概率值再进行一次 变换。经过 变换之后,最大概率值即为最接近于 的值。其它概率值经 变换之后,均为小于 的实值。为了满足最小化的条件, 函数通常会取个负号( )。此时,若实际标签张量在模型输出结果 的对应位置的值越接近0,则具有越小的损失值;否则,损失值越大。
举例: 假设实际标签张量为 (pig, pig, cat, dog),而模型输出结果为 。因此,直接使用NLLLoss损失函数计算预测结果和Real Label之间的损失值如下所示。


>>>logsfm(output)
tensor([[-0.9718, -1.4177, -0.9694],
        [-1.1788, -1.0826, -1.0395],
        [-0.8300, -1.1571, -1.3881],
        [-1.0693, -1.3454, -0.9255]])
>>> loss = nn.NLLLoss()
>>> target = torch.tensor([2, 2, 0, 1])
>>> loss(logsfm(output), target)
tensor(1.0461)

Of course, 实际标签张量为 ,因此我们可以手动计算NLLLoss损失函数对应的损失值。显然,两者的计算结果是一致的。

>>> loss = logsfm(output)[0, 2] + logsfm(output)[1, 2] + logsfm(output)[2, 0] + logsfm(output)[3, 1]
>>> loss
tensor(-4.1843)
>>> -loss / logsfm(output).size()[0]
tensor(1.0461)

参考链接

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值