lee-romantic 's Blog
Everything is OK!
Toggle navigation
lee-romantic 's Blog
主页
About Me
归档
标签
CrossEntropyLoss和NLLLoss的理解
2018-10-23 17:43:24
7026
0
0
lee-romantic
`Cross Entropy(也就是交叉熵)Loss `:交叉熵损失函数,通常用于多分类,其中$y_i$是one_hot标签,$p_i$是softmax层的输出结果,交叉熵损失$E$定义为: $E=-\sum_1^n y_i *log(P_i) $ `Negative Log Liklihood(NLL) Loss`:负对数似然损失函数,X是$log\_softmax()$的输出,$label$是对应的标签位置 $loss(X,label)=-X_{label} $ 损失函数`NLLLoss()` 的 输入 是一个对数概率向量和一个目标标签,并对应位置相乘相加,最后再取负(也就是说,这里的$X_{label}$,,对于独热码来说,实际上就是取的X中,对应于label中为1的那个x). 它不会为我们计算对数概率,适合最后一层是`log_softmax()`(`log_softmax`也就是对softmax的输出取对数)的网络. 损失函数 `CrossEntropyLoss()` 与 `NLLLoss() `类似, 唯一的不同是它为我们去做 `softmax`并取对数.可以理解为: `CrossEntropyLoss()=log_softmax() + NLLLoss()` 代码则为: ``` import torch import torch.nn.functional as F #output是神经网络最后的输出张量,b_y是标签(1hot) loss1 = torch.nn.CrossEntropyLoss(output,b_y) loss2 =F.nll_loss(F.log_softmax(output,1),b_y) #loss1与loss2等效 ``` 另外还有一种关于`softmax loss`的说法: 当`cross entropy`的输入P是`softmax`的输出时,`cross entropy`等于`softmax loss`。$P_j$是输入的概率向量$P_j$的第j个值,所以如果你的概率是通过softmax公式得到的,那么`cross entropy`就是`softmax loss`。 可见,我们通常使用的`cross entropy loss`,几乎都可以称作`softmax loss` `softmax loss`参考:https://blog.csdn.net/u014380165/article/details/77284921 参考资料: http://sshuair.com/2017/10/21/pytorch-loss/ https://blog.csdn.net/hao5335156/article/details/80607732 https://blog.csdn.net/zhangxb35/article/details/72464152?utm_source=itdadao&utm_medium=referral http://www.ituring.com.cn/book/tupubarticle/16827 更多关于pytorch常用的loss,这个链接总结的很好: https://blog.csdn.net/zhangxb35/article/details/72464152
上一篇:
最大池化层(MaxPooling Layer)
下一篇:
python函数的参数
0
赞
7026 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册