torch.norm
- torch.norm(input, p='fro', dim=None, keepdim=False, out=None, dtype=None)[源代码]
-
返回给定张量的矩阵 norm 或向量 norm。
/* 更自然的表达应该是:*/计算并返回给定张量的矩阵范数或向量范数。
警告
torch.norm 已被弃用,未来可能会从 PyTorch 中移除。它的文档和行为可能存在错误,且不再得到更新和支持。
计算向量范数时使用
torch.linalg.vector_norm()
,计算矩阵范数时使用torch.linalg.matrix_norm()
。对于一个行为与此类似的函数,请参见torch.linalg.norm()
。需要注意的是,这些函数的签名与torch.norm
略有不同。- 参数
-
-
输入 (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, optional) – 指定要计算
input
范数的维度。如果dim
为None
,则会跨所有维度计算input
的范数。若由p
指示的范数类型不支持指定的维度数量,则会发生错误。 -
keepdim (bool, optional) – 是否保留输出张量的
dim
维度。如果dim
为None
并且out
也为None
,则忽略此参数。默认值:False
-
out (Tensor, 可选) – 输出张量。如果
dim
为None
且out
也为None
,则忽略。 -
dtype (
torch.dtype
, 可选) – 返回张量的数据类型。如果指定了,则在执行操作时将输入张量转换为指定的torch.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))