实例解释NLLLoss损失函数与CrossEntropyLoss损失函数的关系

在分类问题中常用到交叉熵损失函数 CrossEntropyLoss,有时候还能看到NLLLoss损失,两个损失是有关联的。

1、首先,随机生成一个3 * 3的 tensor,假设 该张量 test_n是我们的神经网络的输出,一行相当于一个样本的预测结果,如下:

2、使用Softmax处理生成的tensor, 这里要对每行元素进行操作,dim=1是对每行的元素进行操作(也就是沿着列增加的方向),dim=0是对每列的元素进行操作(也就是沿着行增加的方向),

实例解释NLLLoss损失函数与CrossEntropyLoss损失函数的关系

3、接着对处理得到的tensor求对数,Softmax处理后的数值都在0~1之间,所以取 ln对数之后值域(-∞,0)

假设我们的目标是 target = torch.tensor([2, 0, 1]),我们希望 target 的label所对应的概率越大越好(在对数图像中越接近X轴的1),

那么对数值的绝对值就要越小(在对数图像中越接近Y轴的0),2是第一行中要取数值的索引,0是第二行要取数值的索引,1是第三行要取数值的索引,

对取出来的数值取绝对值后,再求平均值,该平均值就是要优化的损失,越小越好。

使用NLLLoss来验证下,和上述解释相符,

而CrossEntropyLoss损失函数是Softmax + Log + NLLLoss这些操作合并起来的,CrossEntropyLoss内部使用了nn.LogSoftmax。直接将神经网络的输出test_n和target作为输入进行计算。

实例解释NLLLoss损失函数与CrossEntropyLoss损失函数的关系

Enjoy it!

Original: https://www.cnblogs.com/booturbo/p/16491565.html
Author: BooTurbo
Title: 实例解释NLLLoss损失函数与CrossEntropyLoss损失函数的关系

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685911/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球