深度学习-NLLLoss函数

目录

数学定义

函数的优点

函数的缺陷

代码实现

总结

官方文档


在深度学习中,NLLLoss函数是一种常用的损失函数,它通常与LogSoftmax函数一起使用,用于多分类问题。NLLLoss函数计算的是预测概率与真实标签之间的负对数似然损失。

数学定义

假设我们有一个向量z=[z1,z2,...,zn],其中zi是模型对第ii个类别的原始输出(未经过任何非线性变换)。首先,我们需要应用LogSoftmax函数来得到每个类别的对数概率:

这里的li是第i个类别的对数概率。

对于每个样本ii,假设真实标签为yiyi​,则NLLLoss函数计算的是真实标签对应的对数概率的负值:

对于整个批次的数据,NLLLoss函数的总损失是所有样本损失的平均值:

其中N是批次中样本的数量。

函数的优点

1.数值稳定:与LogSoftmax函数结合使用时,NLLLoss函数可以有效的避免数值溢出问题。

2.计算效率好:相比于直接使用Softmax函数后再计算交叉熵损失,使用NLLLoss函数可以简化计算过程。

3.简化梯度计算:NLLLoss函数的梯度计算较为简单,有利于提高计算速度。

函数的缺陷

1.只能用于单标签的分类:NLLLoss函数每一个样本只有一个正确的标签,不适用于多标签的分类问题。

2.对异常值敏感:如果预测结果与真实标签相差很大,NLLLoss函数的损失值很大,可能会导致训练的结果不稳定。

3.计算效率高:尽管NLLLoss函数简化了计算,但是计算LogSoftmax仍然涉及指数运算求和,这在计算上是相对昂贵的。

代码实现

import torch
import torch.nn as nn
#创建LogSoftmax函数实例
log_softmax=nn.LogSoftmax(dim=1)
#创建NLLLoss函数实例
nll_loss=nn.NLLLoss()
#实例
#假设我们有两个样本,每一个样本有三个类别
inputs=torch.randn(2,3)
#经过LogSoftmax函数
log_probs=log_softmax(inputs)
#标签
#每一个样本的真实标签是一个整数,表示属于哪一个类别
targets=torch.tensor([0,2])
#计算NLLLoss
loss=nll_loss(log_probs,targets)
print(loss.item())

总结

NLLLoss函数在深度学习中的多分类问题中非常常见,它与LogSoftmax函数结合使用,可以提供稳定的数值计算和高效的损失计算。然而,在某些情况下,如多标签分类问题或其他特殊需求时,可能需要考虑其他的损失函数。

官方文档

torch — PyTorch 2.4 documentation

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值