PyTorch详解NLLLoss + softmax和CrossEntropyLoss


1.softmax**

1.1作用
将得到的数据变为1的分布,使结果在0-1之间,方便评估和比较预测结果;
当我们通过模型
PyTorch详解NLLLoss + softmax和CrossEntropyLoss_第1张图片
得到三个输出(O1=0.1 , O2 = 1,O3 = 10) 那么我们就选择最大为我们想要的结果。但是三个数字之间的差距太大,那么就用softmax将三个值归一化到0-1之间
2.softmax公式
在这里插入图片描述
例如上述的三个数,y1 = exp(0.1)/( exp(0.1) + exp(1) + exp(10) )
剩下的以此类推。
import torch.nn.functional as F包里面softmax的用法有dim = 0, 1

PyTorch详解NLLLoss + softmax和CrossEntropyLoss_第2张图片
dim = 1 是,对 d 的列求和等于 1 ,返回一个列和为 1tensor
dim = 0 是,对 d 的行求和等于 1 ,返回一个行和为 1tensor

注意,是对 dsoftmax的方法,然后返回一个新的tensor
可以类似理解为 d.softmax()

2.NLLLoss()(数据怎么算的,原理讲不来)

这是一个nn.module()模块当中的一个损失函数,作用就是:
NLLLoss的结果就是把经过log_softmax(softmax求对数)
函数的值与标签对应的那个值拿出来求和,再求平均,最后取取相反数。
比如:

tensor([[-1.6971, -1.8309, -1.6135, -1.4006, -1.5566],
        [-2.8184, -1.0854, -1.3601, -1.7209, -1.7897],
        [-0.9932, -1.9865, -1.9419, -1.1860, -3.1333]],
       grad_fn=<LogSoftmaxBackward>)
target = [1,0,4]

假如Target的tensor是[1,0,4]。即第一行取第1个元素,第二行取第0个元素,第三行取第4个元素。

-[(-1.8309-2.8184-3.1333)/3]=2.5942

3.CrossEntropyLoss

这个就是
NLLLoss()softmax()合并成一个函数。我看其他的都这样写。
具体原理看看其他博客。

最后发现,我的问题不在这里,我好想写错博客了

你可能感兴趣的:(初学,Python,pytorch)