其他
【他山之石】浅谈数据标准化与Pytorch中NLLLoss和CrossEntropyLoss损失函数的区别
地址:https://www.zhihu.com/people/jian-helloai
01
数据标准化
02
Pytorch中Softmax、LogSoftmax、NLLLoss和CrossEntropyLoss损失函数的关系
>>> import torch
>>> import torch.nn as nn
>>> output = torch.rand(4, 3)
>>> output
tensor([[0.8013, 0.3554, 0.8037],
[0.6099, 0.7061, 0.7492],
[0.6697, 0.3425, 0.1116],
[0.4505, 0.1743, 0.5942]])
>>> sfm = nn.Softmax(dim=1)
>>> sfm(output)
tensor([[0.3784, 0.2423, 0.3793],
[0.3076, 0.3387, 0.3536],
[0.4360, 0.3144, 0.2496],
[0.3433, 0.2604, 0.3963]])
>>> logsfm = torch.log(sfm(output))
>>> logsfm
tensor([[-0.9718, -1.4177, -0.9694],
[-1.1788, -1.0826, -1.0395],
[-0.8300, -1.1571, -1.3881],
[-1.0693, -1.3454, -0.9255]])
>>> logsfm = nn.LogSoftmax(dim=1)
>>> logsfm(output)
tensor([[-0.9718, -1.4177, -0.9694],
[-1.1788, -1.0826, -1.0395],
[-0.8300, -1.1571, -1.3881],
[-1.0693, -1.3454, -0.9255]])
>>>logsfm(output)
tensor([[-0.9718, -1.4177, -0.9694],
[-1.1788, -1.0826, -1.0395],
[-0.8300, -1.1571, -1.3881],
[-1.0693, -1.3454, -0.9255]])
>>> loss = nn.NLLLoss()
>>> target = torch.tensor([2, 2, 0, 1])
>>> loss(logsfm(output), target)
tensor(1.0461)
>>> loss = logsfm(output)[0, 2] + logsfm(output)[1, 2] + logsfm(output)[2, 0] + logsfm(output)[3, 1]
>>> loss
tensor(-4.1843)
>>> -loss / logsfm(output).size()[0]
tensor(1.0461)
>>> loss = nn.CrossEntropyLoss()
>>> target
tensor([2, 2, 0, 1])
>>> output
tensor([[0.8013, 0.3554, 0.8037],
[0.6099, 0.7061, 0.7492],
[0.6697, 0.3425, 0.1116],
[0.4505, 0.1743, 0.5942]])
>>> loss(output, target)
tensor(1.0461)
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
直播预告
历史文章推荐
【CVPR 2020 Tutorial】如何写好论文和评审(概述)
太牛逼了!一位中国博士把整个CNN都给可视化了,每个细节看的清清楚楚!
Nature发表牛津博士建议:我希望在读博士之初时就能知道的20件事
沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题
如何看待2021年秋招算法岗灰飞烟灭?
独家解读 | ExprGAN:基于强度可控的表情编辑
独家解读 | 矩阵视角下的BP算法
独家解读 | Capsule Network深度解读
独家解读 | Fisher信息度量下的对抗攻击
论文解读 | 知识图谱最新研究综述
你的毕业论文过了吗?《如何撰写毕业论文?》
卡尔曼滤波系列——经典卡尔曼滤波推导
分享、点赞、在看,给个三连击呗!