pytorch-tensor属性统计(norm,max,min...)

发布时间 2023-07-31 21:56:05作者: 哎呦哎(iui)

statistics
▪ norm (范数)
▪ mean,sum (平均值,求和)
▪ prod (累乘)
▪ max, min, argmin, argmax
▪ kthvalue, topk(第k大)

norm(范式)

这里面有一范式和二范式。
一范式:

\[||x||_1=\sum_k|x_k| \]

二范式:

\[||x||_1=\sqrt{\sum_k{x_k^2}} \]

a.norm(k,dim)
这个dim,可以不填,不填就是整个tensor的范式

a=torch.full([8],1.)
b=a.view(2,4)
c=a.view(2,2,2)
b
# tensor([[1., 1., 1., 1.],
#         [1., 1., 1., 1.]])

c
# tensor([[[1., 1.],
#          [1., 1.]],
# 
#         [[1., 1.],
#          [1., 1.]]])


a.norm(1),b.norm(1),c.norm(1)
# (tensor(8.), tensor(8.), tensor(8.))

a.norm(2),b.norm(2),c.norm(2)
# (tensor(2.8284), tensor(2.8284), tensor(2.8284))

对于a.norm(2,dim)
如果加了维度的话,就是该维度变没有了
比如[2,3,4]
dim=0,就是两个[3,4]对应位置求范式操作
dim=1,就是三个[2,4]对应位置求范式操作
dim=2,就是四个[2,3]对应位置求范式操作

b.norm(1,dim=1)
# tensor([4., 4.])


b.norm(2,dim=1)
# tensor([2., 2.])


b.norm(1,dim=0)
# tensor([2., 2., 2., 2.])



c.norm(1,dim=0)
# tensor([[2., 2.],
#         [2., 2.]])


c.norm(2,dim=0)
# tensor([[1.4142, 1.4142],
#         [1.4142, 1.4142]])

image

t=torch.rand(2,3,4)
t.norm(1,dim=0).shape
# torch.Size([3, 4])


t.norm(1,dim=1).shape
# torch.Size([2, 4])


t.norm(1,dim=2).shape
# torch.Size([2, 3])

image

mean,sum,min,max,prod

a.mean()
torch.mean(a,dim)
均值

a.sum()
torch.sum(a,dim)
求和

a.min()
torch.min(a,dim)
求最小值

a.max()
torch.max(a,dim)

a=torch.arange(8).view(2,4).float()
a
# tensor([[0., 1., 2., 3.],
#         [4., 5., 6., 7.]])
a.min(),a.max(),a.mean(),a.prod()
# (tensor(0.), tensor(7.), tensor(3.5000), tensor(0.))
a.sum()
# tensor(28.)

argmax(),argmin()

a.argmax(dim)或者torch.argmax(a,dim)
如果不加dim的话,默认求整个tensor的最大值所在的位置,但是这个位置是打平之后的位置
加上dim之后就是在该维度上,返回该维度上每一个位置的最大值所在位置

a
# tensor([[0., 1., 2., 3.],
#         [4., 5., 6., 7.]])


a.argmax()
# tensor(7)

这个函数用处比较多的地方是在多分类预测的softmax之后,我们要得到每一个样本最大值所在位置的时候

a=torch.randn(4,10)
a


a.argmax(dim=1)
# tensor([7, 0, 9, 5])
# 这个相当于4个样本,10分类,然后返回的是每个样本的预测值所在位置

这个相当于4个样本,10分类,然后返回的是每个样本的预测值所在位置

Top-K or k-th

▪ .topk

  • Largest

▪ kthvalue

a.topk(k,dim)
返回dim维度上前k大的值
假如a=[4,10],a.topk(3,dim=1),则返回的shape=[4,3],topk(3,dim=0),则返回的shape=[3,10]
这个函数默认前k大,如果想返回前k小的话,就是a.topk(k,dim,largest=False)

a.kthvalue(k,dim)
返回的第k大

image
image

image

compare

▪ >, >=, <, <=, !=, ==
▪ torch.eq(a, b)
▪ torch.equal(a, b)

如果和一个具体的数字向比较话,可以用

a>0,a>=0,a!=0,a==0
或者torch.gt(a,0)

image

如果说想比较两个tensor的数值是否相等的话,可以用

torch.eq(a,b)
返回与a,b相同shape的一个tensor,同一位置中的数值相等的话是True,不相等的话是False

torch.equal(a,b)
只返回一个True或者False

image