當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch norm用法及代碼示例


本文簡要介紹python語言中 torch.linalg.norm 的用法。

用法:

torch.linalg.norm(A, ord=None, dim=None, keepdim=False, *, out=None, dtype=None) → Tensor

參數

  • A(Tensor) -形狀為 (*, n)(*, m, n) 的張量,其中 * 是零個或多個批次維度

  • ord(int,float,inf,-inf,'fro','nuc',可選的) - 規範的順序。默認:None

  • dim(int,元組[int],可選的) - 計算向量或矩陣範數的維度。見上麵的行為時dim= None.默認:None

  • keepdim(bool,可選的) -如果設置為 True ,則減少的維度將作為大小為 1 的維度保留在結果中。默認值:False

關鍵字參數

  • out(Tensor,可選的) -輸出張量。如果 None 則忽略。默認值:None

  • dtype(torch.dtype, 可選的) -如果指定,則在執行操作之前輸入張量將轉換為 dtype ,並且返回的張量的類型將為 dtype 。默認值:None

返回

一個實值張量,即使 A 是複數。

計算向量或矩陣範數。

如果 A 是複數值,則計算 A .abs() 的範數

支持 float、double、cfloat 和 cdouble dtypes 的輸入。

該函數是計算向量範數還是矩陣範數,其確定如下:

  • 如果 dimint ,則將計算矢量範數。

  • 如果 dim2 - tuple ,則將計算矩陣範數。

  • 如果 dim = Noneord = NoneA 將被展平為 1D 並且將計算結果向量的 2 範數。

  • 如果 dim = Noneord != NoneA 必須是 1D 或 2D。

ord 定義計算的範數。支持以下規範:

ord

矩陣的範數

向量的範數

None(默認)

弗羅貝尼烏斯範數

2 -norm(見下文)

‘fro’

弗羅貝尼烏斯範數

- 不支持 -

‘nuc’

核規範

- 不支持 -

inf

max(sum(abs(x), dim=1))

max(abs(x))

-inf

min(sum(abs(x), dim=1))

min(abs(x))

0

- 不支持 -

sum(x != 0)

1

max(sum(abs(x), dim=0))

如下

-1

min(sum(abs(x), dim=0))

如下

2

最大奇異值

如下

-2

最小奇異值

如下

其他 intfloat

- 不支持 -

sum(abs(x)^{ord})^{(1 / ord)}

其中 inf 指的是 float(‘inf’) 、NumPy 的 inf 對象或任何等效對象。

例子:

>>> from torch import linalg as LA
>>> a = torch.arange(9, dtype=torch.float) - 4
>>> a
tensor([-4., -3., -2., -1.,  0.,  1.,  2.,  3.,  4.])
>>> B = a.reshape((3, 3))
>>> B
tensor([[-4., -3., -2.],
        [-1.,  0.,  1.],
        [ 2.,  3.,  4.]])

>>> LA.norm(a)
tensor(7.7460)
>>> LA.norm(B)
tensor(7.7460)
>>> LA.norm(B, 'fro')
tensor(7.7460)
>>> LA.norm(a, float('inf'))
tensor(4.)
>>> LA.norm(B, float('inf'))
tensor(9.)
>>> LA.norm(a, -float('inf'))
tensor(0.)
>>> LA.norm(B, -float('inf'))
tensor(2.)

>>> LA.norm(a, 1)
tensor(20.)
>>> LA.norm(B, 1)
tensor(7.)
>>> LA.norm(a, -1)
tensor(0.)
>>> LA.norm(B, -1)
tensor(6.)
>>> LA.norm(a, 2)
tensor(7.7460)
>>> LA.norm(B, 2)
tensor(7.3485)

>>> LA.norm(a, -2)
tensor(0.)
>>> LA.norm(B.double(), -2)
tensor(1.8570e-16, dtype=torch.float64)
>>> LA.norm(a, 3)
tensor(5.8480)
>>> LA.norm(a, -3)
tensor(0.)

使用 dim 參數計算向量範數:

>>> c = torch.tensor([[1., 2., 3.],
...                   [-1, 1, 4]])
>>> LA.norm(c, dim=0)
tensor([1.4142, 2.2361, 5.0000])
>>> LA.norm(c, dim=1)
tensor([3.7417, 4.2426])
>>> LA.norm(c, ord=1, dim=1)
tensor([6., 6.])

使用 dim 參數計算矩陣範數:

>>> A = torch.arange(8, dtype=torch.float).reshape(2, 2, 2)
>>> LA.norm(A, dim=(1,2))
tensor([ 3.7417, 11.2250])
>>> LA.norm(A[0, :, :]), LA.norm(A[1, :, :])
(tensor(3.7417), tensor(11.2250))

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.linalg.norm。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。