首先softmax和log_softmax的关系就是,后者是对前者做了一个log计算,也就是对数函数计算
对数函数(Logarithmic Function)是以幂(真数)为自变量,指数为因变量,底数为常量的函数。 ——————摘自《百度百科》
函数图像如下
softmax是对指定向量的指定维度进行概率计算,每次所求概率之和为1
import torch
import torch.nn.functional as tnfsoftmaxTest = torch.Tensor([2,3,5])
print("tnf.softmax(dim=0):",tnf.softmax(softmaxTest,dim=0))
#print("________________________________________________________________")
#print("tnf.logsoftmax(dim=0):",tnf.log_softmax(softmaxTest,dim=0))
#print("________________________________________________________________")
#print("np.log:",np.log(tnf.softmax(softmaxTest,dim=0)))
先来看看 softmax和log_softmax的关系,其输出分别是
tnf.softmax(0): tensor([0.0420, 0.1142, 0.8438])
________________________________________________________________
tnf.logsoftmax(0): tensor([-3.1698, -2.1698, -0.1698])
________________________________________________________________
np.log: tensor([-3.1698, -2.1698, -0.1698])
确实是log(softmax) = log_softmax
先说一下softmax的计算方法,以上面的softmaxTest为例,就是,
,
,横向相加,三个数据的和很接近1
现在来分别看看在一个shape为[2,3,3]的张量中dim = 0, dim = 1的情况
softmaxTest = torch.Tensor([ [ [1,2,7] , [2,3,5] , [3,4,3] ] , [ [2,2,6] , [3,3,4] , [4,4,2] ] ])
print("tnf.softmax(0):",tnf.softmax(softmaxTest,0))
print("________________________________________________________________")
print("tnf.softmax(1):",tnf.softmax(softmaxTest,1))
print("________________________________________________________________")
print("tnf.softmax(2):",tnf.softmax(softmaxTest,2))
输出
tnf.softmax(0): tensor([[[0.2689, 0.5000, 0.7311],
[0.2689, 0.5000, 0.7311],
[0.2689, 0.5000, 0.7311]],[[0.7311, 0.5000, 0.2689],
[0.7311, 0.5000, 0.2689],
[0.7311, 0.5000, 0.2689]]])
________________________________________________________________
tnf.softmax(1): tensor([[[0.0900, 0.0900, 0.8668],
[0.2447, 0.2447, 0.1173],
[0.6652, 0.6652, 0.0159]],[[0.0900, 0.0900, 0.8668],
[0.2447, 0.2447, 0.1173],
[0.6652, 0.6652, 0.0159]]])
________________________________________________________________
tnf.softmax(2): tensor([[[0.0025, 0.0067, 0.9909],
[0.0420, 0.1142, 0.8438],
[0.2119, 0.5761, 0.2119]],[[0.0177, 0.0177, 0.9647],
[0.2119, 0.2119, 0.5761],
[0.4683, 0.4683, 0.0634]]])
dim = 0
对[2,3,3]的张量的0维进行求概率,那么他的计算就是概率0.2689和概率0.7311所代表的1,2所计算得来
来自这两个地方的数据
[ [ [1,2,7] , [2,3,5] , [3,4,3] ] , [ [2,2,6] , [3,3,4] , [4,4,2] ] ]
dim = 1
在这个shape为[2,3,3]的张量中,对1维进行求概率,那么就是对三个长度为三的张量的同位元素进行求概率,比如,