“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情”
- 模型分类问题经常遇到正负样本不均衡,难易样本不均衡的情况,通过不同的优化损失函数通常有一个明显的效果,但是损失函数中,经常会遇到torch.nn.NLLLOSS函数作为损失函数的中间函数来用。
- torch.nn.NLLLOSS通常不被独立当作损失函数,而需要和softmax、log等运算组合当作损失函数。此文为:关于Focal loss损失函数的代码实现 - 知乎 (zhihu.com)的补充
- 个人理解就是,比如某些损失函数用代码实现效率慢,性能不好,所以用几个其他函数达到相同的目的,而该函数就是其中一个环节。
torch.nn.NLLLOSS官方链接:NLLLoss — PyTorch 1.12 documentation
- 首先对比Log_softmax, Nllloss,CrossEntropyLoss函数的表达式
log_softmax:
Softmax() 函数的值域是 [ 0 , 1 ] 公式:
Log_Softmax() 函数的值域是 ( − ∞ , 0 ] ,公式:
NLLLoss() ,即负对数似然损失函数(Negative Log Likelihood),公式:
公式上来看:nllloss的结果就是yk与经过log_softmax函数激活后的数据相乘,然后累加求平均值并取反
实际使用NLLLoss()损失函数时,传入的标签,无需进行 one_hot 编码。
CrossEntropyLoss() = log_softmax + nllloss
------好像也没啥了,可以见参考资料,有现成代码注解,自己试验的也没意义
- ref:
Log_Softmax()激活函数、NLLLoss()损失函数、CrossEntropyLoss()损失函数浅析_嘿嘿骑士的博客-CSDN博客_logsoftmax是损失函数吗