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', 可选) –
范数的阶数。默认值:
'fro'
可以计算以下范数ord
矩阵范数
向量范数
’fro’
Frobenius 范数
–
‘nuc’
核范数
–
数字
–
sum(abs(x)**ord)**(1./ord)
向量范数可以在任意数量的维度上计算。
input
的对应维度被展平成一个维度,并且范数在展平的维度上计算。在所有情况下,Frobenius 范数产生与
p=2
相同的结果,除非dim
是三个或更多维度的列表,在这种情况下,Frobenius 范数会抛出错误。核范数只能在恰好两个维度上计算。
dim (int, tuple of ints, list of ints, 可选) – 指定要计算
input
范数的维度或维度。如果dim
为None
,则范数将在input
的所有维度上计算。如果p
指示的范数类型不支持指定的维度数,则会发生错误。keepdim (bool, 可选) – 输出张量是否保留
dim
。如果dim
=None
且out
=None
,则忽略。默认值:False
out (Tensor, 可选) – 输出张量。如果
dim
=None
且out
=None
,则忽略。dtype (
torch.dtype
, optional) – 返回张 Desired data type of returned tensor. 如果指定,则输入张量在执行操作时被转换为dtype
。默认值:None。
注意
即使
p='fro'
支持任意数量的维度,但 Frobenius 范数的真正数学定义仅适用于具有恰好两个维度的张量。torch.linalg.matrix_norm()
与ord='fro'
一致于数学定义,因为它只能应用于恰好两个维度。示例
>>> 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))