快捷方式

torch.linalg.norm

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

計算向量或矩陣範數。

支援 float, double, cfloat 和 cdouble 資料型別的輸入。

此函式計算向量範數還是矩陣範數由以下規則確定

  • 如果 dim 是一個 int,將計算向量範數。

  • 如果 dim 是一個 2-tuple,將計算矩陣範數。

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

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

ord 定義要計算的範數。支援以下範數:

ord

矩陣範數

向量範數

None (預設值)

Frobenius 範數

2-範數 (見下文)

‘fro’

Frobenius 範數

Frobenius 範數

‘nuc’

核範數

Frobenius 範數

inf

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

max(abs(x))

-inf

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

min(abs(x))

0

Frobenius 範數

sum(x != 0)

1

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

見下文

-1

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

見下文

2

最大奇異值

見下文

-2

最小奇異值

見下文

其他 intfloat

Frobenius 範數

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

其中 inf 指的是 float(‘inf’),NumPy 的 inf 物件,或任何等效物件。

另請參閱

torch.linalg.vector_norm() 計算向量範數。

torch.linalg.matrix_norm() 計算矩陣範數。

上述函式通常比使用 torch.linalg.norm() 更清晰、更靈活。例如,torch.linalg.norm(A, ord=1, dim=(0, 1)) 總是計算矩陣範數,但使用 torch.linalg.vector_norm(A, ord=1, dim=(0, 1)) 可以計算跨這兩個維度的向量範數。

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

  • ord (int, float, inf, -inf, 'fro', 'nuc', 可選的) – 範數階數。預設值: None

  • dim (int, Tuple[int], 可選的) – 計算向量或矩陣範數的維度。dim=None 時的行為見上文。預設值: None

  • keepdim (bool, 可選的) – 如果設定為 True,則在結果中保留被縮減的維度,大小為一。預設值: False

關鍵字引數
  • out (Tensor, 可選的) – 輸出張量。如果為 None 則忽略。預設值: None

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

返回值

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

示例

>>> 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 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源