pytorch(6)Tensor统计
# 一、Tensor统计
- norm 范数 mormalize是正则化
a=torch.full([8],1)
b=a.view(2,4)
c=a.view(2,2,2)
b
Out[6]:
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
c
Out[7]:
tensor([[[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.]]])
a.norm(1),b.norm(1),c.norm(1)#1范数,绝对值求和
Out[8]: (tensor(8.), tensor(8.), tensor(8.))
a.norm(2),b.norm(2),c.norm(2)#2范数,平方和开根号
Out[10]: (tensor(2.8284), tensor(2.8284), tensor(2.8284))
b.norm(1,dim=1)#给定维度
Out[11]: tensor([4., 4.])
c.norm(1,dim=1)
Out[12]:
tensor([[2., 2.],
[2., 2.]])
c.norm(1,dim=2)
Out[13]:
tensor([[2., 2.],
[2., 2.]])
给定维度的范数计算:例如b,尺寸[2,4],dim=1维度上元素做1范数,[1+1+1+1,1+1+1+1]→[4,4]
- mean sum
- prod 累乘
- max min argmin argmax 最大值位置 首先把tensor打平,再给索引 如果不想打平,就必须给定在某个维度求最值
a=torch.rand(4,8)
a
Out[15]:
tensor([[0.1623, 0.6655, 0.1087, 0.1964, 0.0107, 0.0726, 0.6888, 0.2992],
[0.4385, 0.5422, 0.6995, 0.5982, 0.8123, 0.0262, 0.1726, 0.2951],
[0.8082, 0.7044, 0.3842, 0.4944, 0.3141, 0.6634, 0.2168, 0.1553],
[0.2807, 0.8313, 0.8486, 0.2009, 0.3630, 0.3601, 0.7365, 0.2035]])
a.argmax()
Out[17]: tensor(26)
a.argmax(dim=1)
Out[18]: tensor([6, 4, 0, 2])
- dim keepdim 得到的tensor dim和原来的一样
a.max(dim=1)
Out[19]: (tensor([0.6888, 0.8123, 0.8082, 0.8486]), tensor([6, 4, 0, 2]))
a.max(dim=1,keepdim=True)
Out[20]:
(tensor([[0.6888],
[0.8123],
[0.8082],
[0.8486]]), tensor([[6],
[4],
[0],
[2]]))
- kthvalue topk
a.topk(3,dim=1) #top 3
Out[21]:
(tensor([[0.6888, 0.6655, 0.2992],
[0.8123, 0.6995, 0.5982],
[0.8082, 0.7044, 0.6634],
[0.8486, 0.8313, 0.7365]]), tensor([[6, 1, 7],
[4, 2, 3],
[0, 1, 5],
[2, 1, 6]]))
a.topk(3,dim=1,largest=False)
Out[23]:
(tensor([[0.0107, 0.0726, 0.1087],
[0.0262, 0.1726, 0.2951],
[0.1553, 0.2168, 0.3141],
[0.2009, 0.2035, 0.2807]]), tensor([[4, 5, 2],
[5, 6, 7],
[7, 6, 4],
[3, 7, 0]]))
a.kthvalue(8,dim=1)#第8小 只能设置为小,默认为小
Out[24]: (tensor([0.6888, 0.8123, 0.8082, 0.8486]), tensor([6, 4, 0, 2]))
- compare: > >= < <= != == torch.eq(a,b) 返回一个tensor,元素为0或1,
- torch.eq(a,b)返回True 或 False