1.softmax
**1.1作用
将得到的数据变为1的分布,使结果在0-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
dim = 1
是,对 d
的列求和等于 1
,返回一个列和为 1
的 tensor
dim = 0
是,对 d
的行求和等于 1
,返回一个行和为 1
的 tensor
注意,是对 d
用softmax
的方法,然后返回一个新的tensor
可以类似理解为 d.softmax()
这是一个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
这个就是
NLLLoss()
和softmax()
合并成一个函数。我看其他的都这样写。
具体原理看看其他博客。
最后发现,我的问题不在这里,我好想写错博客了