DL - softmax、log_softmax、nll_loss、cross_entropy_loss
创始人
2024-03-16 22:51:57
0

文章目录

      • softmax
      • log_softmax
      • nll_loss
      • cross_entropy_loss


关于 log_softmax

输出使用 log_softmax 计算 softmax 的对数值,log_softmax(x) 等价于 log(softmax(x))
如果使用 log_softmax,损失函数需要使用 nll_loss(Negative Log Likelihood )。

nll_loss 损失函数的表达式为 loss(predict,label)=−predictlabelloss(predict, label) = -predict_{label}loss(predict,label)=−predictlabel​
相当于只取 log(softmax(x)) 预测结果向量 label 对应索引值的相反数。


softmax

a = torch.Tensor([2, 3, 4])# 使用 pytorch 内置的 softmax 函数计算
softmax = a.softmax(dim=0) 
print('-- softmax : ', softmax)
# tensor([0.0900, 0.2447, 0.6652])# 根据公式自己算
manual_softmax = torch.pow(math.e, a)/torch.pow(math.e, a).sum() 
print('-- manual_softmax : ', manual_softmax)
# tensor([0.0900, 0.2447, 0.6652])  同上 

log_softmax

log_softmax = a.log_softmax(dim=0)
print('-- log_softmax : ', log_softmax)
# tensor([-2.4076, -1.4076, -0.4076])manual_log_softmax = (torch.pow(math.e, a) / torch.pow(math.e, a).sum() ).log()
print('-- manual_log_softmax : ', manual_log_softmax)
# tensor([-2.4076, -1.4076, -0.4076]) 同上

nll_loss

print(manual_log_softmax.unsqueeze(1))
# tensor([[-2.4076], [-1.4076], [-0.4076]])nll_loss = F.nll_loss(manual_log_softmax.unsqueeze(1), torch.LongTensor([0, 0, 0]), reduction='none')
print('-- nll_loss : ', nll_loss) 
# tensor([2.4076, 1.4076, 0.4076])# 多类别
tmp = torch.Tensor([[-2.4076, 4.52], [-1.4076, 3.42], [-0.4076, 0.123]
])tmp_index = torch.LongTensor([1, 1, 0])nll_loss1 = F.nll_loss(tmp, tmp_index, reduction='none')
print('-- nll_loss1 : ', nll_loss1)
# tensor([-4.5200, -3.4200,  0.4076]) 

cross_entropy_loss

log_softmax 和 nll_loss 经常组合使用,常见于各种分类算法。
cross_entropy_loss 底层实际也是调用的 log_softmax 和 nll_loss。该算子一步到位的将 softmax、log 及 nll 操作全部完成。

b = torch.Tensor([  [1, 2], [0.5, 3], [0.9, 4] ])
loss = nn.CrossEntropyLoss()
l1 = loss(b, torch.LongTensor([0, 1, 0]))
print('-- loss : ', l1) # tensor(1.5121)

伊织 2022-12-04

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...