torch.norm¶
- torch.norm(input, p='fro', dim=None, keepdim=False, out=None, dtype=None)[原始碼][原始碼]¶
返回給定張量的矩陣範數或向量範數。
警告
torch.norm 已被棄用,並可能在未來的 PyTorch 版本中移除。其文件和行為可能不準確,並且不再積極維護。
計算向量範數時請使用
torch.linalg.vector_norm(),計算矩陣範數時請使用torch.linalg.matrix_norm()。對於與此函式行為類似的函式,請參閱torch.linalg.norm()。但請注意,這些函式的簽名與torch.norm的簽名略有不同。- 引數
input (Tensor) – 輸入張量。其資料型別必須是浮點型別或複數型別。對於複數輸入,範數是使用每個元素的絕對值計算的。如果輸入是複數,並且既未指定
dtype也未指定out,則結果的資料型別將是相應的浮點型別(例如,如果input是 complexfloat,則結果為 float)。p (int, float, inf, -inf, 'fro', 'nuc', optional) –
範數的階數。預設值:
'fro'可計算以下範數階數
矩陣範數
向量範數
’fro’
Frobenius 範數
–
‘nuc’
核範數
–
數字
–
sum(abs(x)**ord)**(1./ord)
向量範數可以在任意數量的維度上計算。將
input的相應維度展平為一個維度,並在展平後的維度上計算範數。在所有情況下,Frobenius 範數的結果與
p=2相同,除非dim是包含三個或更多維度的列表,在這種情況下,Frobenius 範數會丟擲錯誤。核範數只能在恰好兩個維度上計算。
dim (int, tuple of ints, list of ints, optional) – 指定計算範數的
input的維度或多個維度。如果dim為None,則將在input的所有維度上計算範數。如果由p指示的範數型別不支援指定的維度數量,則會發生錯誤。keepdim (bool, optional) – 輸出張量是否保留
dim。如果dim=None且out=None,則忽略。預設值:Falseout (Tensor, optional) – 輸出張量。如果
dim=None且out=None,則忽略。dtype (
torch.dtype, optional) – 返回張量的期望資料型別。如果指定,輸入張量在執行操作時將被轉換為dtype。預設值:None。
注意
儘管
p='fro'支援任意數量的維度,但 Frobenius 範數的真實數學定義僅適用於恰好有兩個維度的張量。帶有ord='fro'的torch.linalg.matrix_norm()與數學定義一致,因為它只能應用於恰好兩個維度。示例
>>> import torch >>> a = torch.arange(9, dtype= torch.float) - 4 >>> b = a.reshape((3, 3)) >>> torch.norm(a) tensor(7.7460) >>> torch.norm(b) tensor(7.7460) >>> torch.norm(a, float('inf')) tensor(4.) >>> torch.norm(b, float('inf')) tensor(4.) >>> c = torch.tensor([[ 1, 2, 3], [-1, 1, 4]] , dtype=torch.float) >>> torch.norm(c, dim=0) tensor([1.4142, 2.2361, 5.0000]) >>> torch.norm(c, dim=1) tensor([3.7417, 4.2426]) >>> torch.norm(c, p=1, dim=1) tensor([6., 6.]) >>> d = torch.arange(8, dtype=torch.float).reshape(2, 2, 2) >>> torch.norm(d, dim=(1, 2)) tensor([ 3.7417, 11.2250]) >>> torch.norm(d[0, :, :]), torch.norm(d[1, :, :]) (tensor(3.7417), tensor(11.2250))