文章目录

  • 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

DL - softmax、log_softmax、nll_loss、cross_entropy_loss相关推荐

  1. PyTorch学习笔记——softmax和log_softmax的区别、CrossEntropyLoss() 与 NLLLoss() 的区别、log似然代价函数...

    1.softmax 函数 Softmax(x) 也是一个 non-linearity, 但它的特殊之处在于它通常是网络中一次操作. 这是因为它接受了一个实数向量并返回一个概率分布.其定义如下. 定义 ...

  2. DL之SoftmaxWithLoss:SoftmaxWithLoss算法(Softmax+交叉熵误差)简介、使用方法、应用案例之详细攻略

    DL之SoftmaxWithLoss:SoftmaxWithLoss算法(Softmax函数+交叉熵误差)简介.使用方法.应用案例之详细攻略 目录 SoftmaxWithLoss算法简介 1.Soft ...

  3. Pytorch详解NLLLoss和CrossEntropyLoss、以及softmax和log_softmax

    数据 import torch import torch.nn.functional as F import numpy as np# 随机新建3个样例数据,每个样例数据包含4个属性特征 input ...

  4. DL之LeNet-5:LeNet-5算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之LeNet-5:LeNet-5算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 LeNet-5算法的简介(论文介绍) LeNet-5算法的架构详解 1.LeNet-5 结构分 ...

  5. DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 导读 基于CNN的神经网络SegNet算法可进行高精度地识别行驶环境. 目录 SegN ...

  6. DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略

    DL框架之Keras:深度学习框架Keras框架的简介.安装(Python库).相关概念.Keras模型使用.使用方法之详细攻略 目录 Keras的简介 1.Keras的特点 2.Keras四大特性 ...

  7. DL:基于神经网络的深度学习模型的总概览简介(DNN/CNN/RNN等)、各种网络结构对比、案例应用对比之详细攻略

    DL:基于神经网络的深度学习模型的总概览简介(DNN/CNN/RNN等).各种网络结构对比.案例应用对比之详细攻略 目录 神经网络所有模型的简介(概览) DNN.CNN.RNN结构对比 相关文章 DL ...

  8. 广义线性模型、Logistic、sigmoid、softmax、多分类、与大数据、优缺点

    广义线性模型.广义线性模型的数学形式.Logistic回归.sigmoid函数.softmax函数.Logistic多分类.Logistic与大数据.Logistic回归优缺点总结 目录

  9. DL中版本配置问题:TensorFlow、Keras、Python版本完美搭配推荐

    DL中版本配置问题:TensorFlow.Keras.Python版本完美搭配推荐 目录 TensorFlow.Keras.Python版本完美搭配推荐 TensorFlow.Keras.Python ...

最新文章

  1. 刷固件Layer1到手机FLASH(硬刷)
  2. boost::mpl模块实现list_c相关的测试程序
  3. 字符串的比较相关方法
  4. 基于CNN实现CIFAR100识别-tensorflow2.0实现
  5. mysql的 怎么处理_本人的MySQL连接到底怎么处理才好……
  6. 哈希表存在的问题及解决方案
  7. 我的docker随笔9:docker在centos上的安装
  8. eclipse package包 java类 有问号 无法读取的问题解决
  9. L1-024. 后天-PAT团体程序设计天梯赛GPLT
  10. 设计模式---访问者模式(C++实现)
  11. I Think I Can!
  12. 计算机四级网络工程师总结
  13. Spring+SpringMVC+MyBatis+JQ+BootStrap练习
  14. GreatRiver研讨会 | ARINC 818的应用及发展
  15. php 微信上传多张图片,php,微信_微信jssdk能上传多张图片吗?,php,微信,javascript - phpStudy...
  16. noip2017广东提高组复赛成绩
  17. IDEA中TODO的使用、配置和设置TODO过滤器
  18. buff系统 游戏中_arpg游戏的技能系统和buff系统的一种实现
  19. python-windows命令行启动appium及杀掉对应接口进程
  20. Linux下安装firefox最新版

热门文章

  1. BUUCTF PWN 刷题 1-15题
  2. win10下Xshell或Xftp缺少mfc110.dll msvcr110.dll怎么破?
  3. 工作之命令小总结(7):tail命令
  4. 3、基于51单片机的智能水箱控制系统-温度-PH值-水位(仿真+程序+原理图)
  5. Java后端技术体系
  6. python并发框架 gevent_python并发编程之gevent协程(四)
  7. linux读取一行数据命令,Shell脚本一次读取文件中一行的2种写法
  8. 2014年华为7月校招(提前批)的一些题目
  9. 阿里云学生服务器购买指南(用途和优势)
  10. 无损放大图片如何设置?图片放大模糊怎么解决?