torch.linalg.norm
是 PyTorch 中用于计算张量范数(Norm)的函数。范数是线性代数中的一个重要概念,用于量化向量或矩阵的大小或长度。这个函数可以处理任意形状的张量,支持多种类型的范数计算。
1.函数签名
torch.linalg.norm(input, ord=None, dim=None, keepdim=False, dtype=None) -> Tensor
参数说明
-
input
:
要计算范数的张量。 -
ord
(可选):
范数的类型,决定范数的计算公式。常见值:None
(默认):计算 Frobenius 范数(矩阵)或 2 范数(向量)。1
: 1 范数(列绝对值之和,或向量绝对值之和)。2
: 2 范数(Euclidean 范数,平方和的平方根)。'fro'
: Frobenius 范数(矩阵的元素平方和开方)。inf
: 无穷范数(矩阵的行绝对值和最大值)。-inf
: 负无穷范数(矩阵的行绝对值和最小值)。
-
dim
(可选):
指定计算范数的维度。- 若为
None
,计算整个张量的范数。 - 若指定为单个或多个维度,则按维度计算范数。
- 若为
-
keepdim
(布尔,可选):
如果为True
,结果会保留被归约的维度,维度的大小为1
。 -
dtype
(可选):
指定计算中使用的数据类型,常用于提高数值精度。
返回值
返回计算出的张量范数。结果是一个标量或一个张量(取决于是否指定 dim
参数)。
常见用法示例
(1) 计算向量的 2 范数
计算向量的欧几里得长度(平方和的平方根)。
import torchx = torch.tensor([3.0, 4.0])
norm = torch.linalg.norm(x)
print(norm) # 输出: 5.0 (因为 sqrt(3^2 + 4^2) = 5)
(2) 计算矩阵的 Frobenius 范数
A = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
norm = torch.linalg.norm(A, ord='fro')
print(norm) # 输出: 5.4772 (因为 sqrt(1^2 + 2^2 + 3^2 + 4^2) ≈ 5.4772)
(3) 按维度计算范数
B = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
norm_dim0 = torch.linalg.norm(B, ord=1, dim=0)
print(norm_dim0) # 输出: tensor([4., 6.]) (列绝对值之和)norm_dim1 = torch.linalg.norm(B, ord=1, dim=1)
print(norm_dim1) # 输出: tensor([3., 7.]) (行绝对值之和)
(4) 计算无穷范数
C = torch.tensor([[1.0, -2.0], [3.0, -4.0]])
inf_norm = torch.linalg.norm(C, ord=float('inf'))
print(inf_norm) # 输出: 7.0 (最大行绝对值和)
(5) 计算负无穷范数
neg_inf_norm = torch.linalg.norm(C, ord=float('-inf'))
print(neg_inf_norm) # 输出: 3.0 (最小行绝对值和)