1. 程式人生 > 程式設計 >PyTorch中Tensor的資料統計示例

PyTorch中Tensor的資料統計示例

張量範數:torch.norm(input,p=2) → float

返回輸入張量 input 的 p 範數

舉個例子:

>>> import torch
>>> 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.]])
>>> 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.]]])
>>> 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.,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.6468]),tensor([6,1,7,7]))
>>> a.argmax(dim=1)
tensor([6,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]]))
>>> a.argmax(dim=1,keepdim=True)
tensor([[6],[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,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.8126],[1.6265,[1.0026,0.7267],[1.5540,1.4294,0.5463],[0.7233,0.4174,0.2725]]),tensor([[4,6],[3,9],[8,4],[7,9,2],9]]))
>>> b.topk(3,dim=1,largest=False)
(tensor([[-1.8984,[-1.0655,-0.9359,-0.2870],-0.2926],[-1.6723,-0.8327],[-2.4822,-1.6142]]),tensor([[3,[1,5],[0,3,[5,4,1],[6,5,3]]))
>>> a.kthvalue(8,dim=1)
(tensor([0.1034,0.8940,0.6155,0.4210,0.1955]),tensor([1,6,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]],dtype=torch.uint8)
>>> torch.eq(a,a)
tensor([[1,1]],dtype=torch.uint8)
>>> torch.equal(a,a)
True

eq 比較張量中的每個資料,equal 比較整個張量

以上這篇PyTorch中Tensor的資料統計示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。