PyTorch中Tensor的数据统计示例
张量范数:torch.norm(input,p=2)→float
返回输入张量input的p范数
举个例子:
>>>importtorch >>>a=torch.full([8],1) >>>b=a.view(2,4) >>>c=a.view(2,2,2) >>>a.norm(1),b.norm(1),c.norm(1) #求1-范数 (tensor(8.),tensor(8.),tensor(8.)) >>>a.norm(2),b.norm(2),c.norm(2) #求2-范数 (tensor(2.8284),tensor(2.8284),tensor(2.8284)) >>>a.norm(3),b.norm(3),c.norm(3)#求∞-范数 (tensor(2.),tensor(2.),tensor(2.)) >>>b tensor([[1.,1.,1.,1.], [1.,1.,1.,1.]]) >>>b.norm(1,1)#在1维度上求1-范数 tensor([4.,4.]) >>>b.norm(2,1)#在1维度上求2-范数 b.norm(1,2) >>>c tensor([[[1.,1.], [1.,1.]], [[1.,1.], [1.,1.]]]) >>>c.norm(1,0)#在0维度上求1-范数 tensor([[2.,2.], [2.,2.]]) >>>c.norm(2,0)#在0维度上求2-范数 tensor([[1.4142,1.4142], [1.4142,1.4142]])
只有一个参数时,表示对整个张量求范数,参数表示范数的幂指数值。
有两个参数时,表示在张量某一维度对尺寸中每一部分求范数,第一个参数是范数的幂指数值,第二个参数是选择的维度。
张量统计
最基础的统计方法,比如张量中的最小值、最大值、均值、累加、累积。
举个例子:
>>>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.sum(),a.prod()#分别求最小值、最大值、均值、累加、累积 (tensor(0.),tensor(7.),tensor(3.5000),tensor(28.),tensor(0.)) >>>a.argmin(),a.argmax()#分别是把张量打平后最小值、最大值的索引 (tensor(0),tensor(7)) >>>a.argmin(1),a.argmax(1)#不打平求1维度中每一部分最小值、最大值的索引 (tensor([0,0]),tensor([3,3]))
dim和keepdim
>>>a=torch.randn(5,10) >>>a tensor([[-0.6346,-0.9074,0.1525,0.1901,-0.5391,-0.2437,1.0150,-0.0427, -1.5336,0.8542], [-0.1879,1.9947,-0.3524,-1.2559,-0.8129,-0.3018,0.5654,0.8428, -0.3517,-0.7787], [0.0686,0.6166,0.2632,-0.0947,-0.5592,-1.4041,1.5565,1.5616, -1.3076,-0.1137], [0.5205,-1.5716,-1.1277,0.8096,-0.2123,-0.0974,0.7698,1.1373, 0.5165,0.5256], [-0.4162,0.3170,0.2368,1.1695,-0.1960,-0.3285,0.2420,1.6468, 0.2646,0.4573]]) >>>a.max(dim=1) (tensor([1.0150,1.9947,1.5616,1.1373,1.6468]),tensor([6,1,7,7,7])) >>>a.argmax(dim=1) tensor([6,1,7,7,7])
max添加dim后不仅显示了1维度中每一部分的最大值,还显示了其索引
>>>a.max(dim=1,keepdim=True) (tensor([[1.0150], [1.9947], [1.5616], [1.1373], [1.6468]]),tensor([[6], [1], [7], [7], [7]])) >>>a.argmax(dim=1,keepdim=True) tensor([[6], [1], [7], [7], [7]])
保持维度一致。添加keepdim后,得出的结果维度不改变,原来是二维的数据,得出的结果还是二维。不添加得出的结果就是一维的。
比较操作
torch.topk(input,k,dim=None,largest=True,sorted=True,out=None)->(Tensor,LongTensor)
沿给定dim维度返回输入张量input中k个最大值。如果不指定dim,则默认为input的最后一维。如果为largest为False,则返回最小的k个值。
返回一个元组(values,indices),其中indices是原始输入张量input中测元素下标。如果设定布尔值sorted为_True_,将会确保返回的k个值被排序。
torch.kthvalue(input,k,dim=None,out=None)->(Tensor,LongTensor)取输入张量input指定维上第k个最小值。如果不指定dim,则默认为input的最后一维。
返回一个元组(values,indices),其中indices是原始输入张量input中沿dim维的第k个最小值下标。
举个例子:
>>>b=torch.randn(5,10) >>>b tensor([[0.1863,0.0160,-1.0657,-1.8984,2.3274,0.6534,1.8126,1.8666, 0.4830,-0.7800], [-0.9359,-1.0655,0.8321,1.6265,0.6812,-0.2870,0.6987,0.6067, -0.1318,0.7819], [-3.1129,0.9571,-0.1319,-1.0016,0.7267,0.1060,-0.2926,0.3492, 1.0026,0.2924], [-0.7101,-0.8327,0.5463,0.3805,-0.8720,-1.6723,0.0365,1.5540, 0.1940,1.4294], [0.4174,-0.9414,-0.0351,-1.6142,-0.7802,-2.3916,-2.4822,0.7233, -0.7037,0.2725]]) >>>b.topk(3,dim=1) (tensor([[2.3274,1.8666,1.8126], [1.6265,0.8321,0.7819], [1.0026,0.9571,0.7267], [1.5540,1.4294,0.5463], [0.7233,0.4174,0.2725]]),tensor([[4,7,6], [3,2,9], [8,1,4], [7,9,2], [7,0,9]])) >>>b.topk(3,dim=1,largest=False) (tensor([[-1.8984,-1.0657,-0.7800], [-1.0655,-0.9359,-0.2870], [-3.1129,-1.0016,-0.2926], [-1.6723,-0.8720,-0.8327], [-2.4822,-2.3916,-1.6142]]),tensor([[3,2,9], [1,0,5], [0,3,6], [5,4,1], [6,5,3]])) >>>a.kthvalue(8,dim=1) (tensor([0.1034,0.8940,0.6155,0.4210,0.1955]),tensor([1,2,6,4,7]))
topk添加largest=False就是返回最小,不添加就是返回最大。
kthvalue返回以从大到小排列的指定位置的数。上面代码中即为返回第8小的数。
torch.eq(input,other,out=None)→Tensor
比较元素相等性。第二个参数可为一个数或与第一个参数同类型形状的张量。
torch.equal(tensor1,tensor2)→bool
如果两个张量有相同的形状和元素值,则返回True,否则False。
举个例子:
>>>a=torch.ones(2,3) >>>b=torch.randn(2,3) >>>torch.eq(a,b) tensor([[0,0,0], [0,0,0]],dtype=torch.uint8) >>>torch.eq(a,a) tensor([[1,1,1], [1,1,1]],dtype=torch.uint8) >>>torch.equal(a,a) True
eq比较张量中的每个数据,equal比较整个张量
以上这篇PyTorch中Tensor的数据统计示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。