行业知识
【pytorch学习】交叉熵损失函数 nn.CrossEntropyLoss() = nn.LogSoftmax(dim=1) + nn.NLLLoss()
2026-11-13 03:08:52
来源:互联网转载
结论: Pytorch中CrossEntropyLoss()函数的主要是将softmax-log-NLLLoss合并到一块得到的结果。
from: https://zhuanlan.zhihu.com/p/98785902
()import torchimport torch.nn as nnx_input=torch.randn(3,3)#随机生成输入 print('x_input:\n',x_input) y_target=torch.tensor([1,2,0])#设置输出具体值 print('y_target\n',y_target)#计算输入softmax,此时可以看到每一行加到一起结果都是1softmax_func=nn.Softmax(dim=1)soft_output=softmax_func(x_input)print('soft_output:\n',soft_output)#在softmax的基础上取loglog_output=torch.log(soft_output)print('log_output:\n',log_output)#对比softmax与log的结合与nn.LogSoftmaxloss(负对数似然损失)的输出结果,发现两者是一致的。logsoftmax_func=nn.LogSoftmax(dim=1)logsoftmax_output=logsoftmax_func(x_input)print('logsoftmax_output:\n',logsoftmax_output)#pytorch中关于NLLLoss的默认参数配置为:reducetion=True、size_average=Truenllloss_func=nn.NLLLoss()nlloss_output=nllloss_func(logsoftmax_output,y_target)print('nlloss_output:\n',nlloss_output)#直接使用pytorch中的loss_func=nn.CrossEntropyLoss()看与经过NLLLoss的计算是不是一样crossentropyloss=nn.CrossEntropyLoss()crossentropyloss_output=crossentropyloss(x_input,y_target)print('crossentropyloss_output:\n',crossentropyloss_output) 最后计算得到的结果为:
x_input: tensor([[ 2.8883, 0.1760, 1.0774], [ 1.1216, -0.0562, 0.0660], [-1.3939, -0.0967, 0.5853]])y_target tensor([1, 2, 0])soft_output: tensor([[0.8131, 0.0540, 0.1329], [0.6039, 0.1860, 0.2102], [0.0841, 0.3076, 0.6083]])log_output: tensor([[-0.2069, -2.9192, -2.0178], [-0.5044, -1.6822, -1.5599], [-2.4762, -1.1790, -0.4970]])logsoftmax_output: tensor([[-0.2069, -2.9192, -2.0178], [-0.5044, -1.6822, -1.5599], [-2.4762, -1.1790, -0.4970]])nlloss_output: tensor(2.3185)crossentropyloss_output: tensor(2.3185)
通过上面的结果可以看出,直接使用pytorch中的loss_func=nn.CrossEntropyLoss()计算得到的结果与softmax-log-NLLLoss计算得到的结果是一致的。
()最新文章
- 2024年前端最全Echarts数据可视化教程(超详细,持续更新中,学习前端开发的步骤,
- Aop注解+Redis解决SpringBoot接口幂等性(源码自取)
- 外网IP访问指南,如何安全获取与使用,避免违法犯罪风险?
- 轻松上手一站式教程,如何下载MineCTF?详细指南助你轻松获取!
- 固定查找框,防止左右移动,实用技巧揭秘!
- 【pytorch学习】交叉熵损失函数 nn.CrossEntropyLoss() = nn.LogSoftmax(dim=1) + nn.NLLLoss()
- qq邮箱的服务器设置在哪里设置密码?
- 【Go之道】探索Go语言之旅:基础与进阶指南
- 远程服务器怎么设置时间?
- 揭秘SKU,专业解读助你轻松掌握电商术语!