网站建立方案湖南住房和建设厅网站
近日在看沐神的《动手学深度学习》,其中提到了范数这一数学概念,感觉很陌生,参考ChatGPT补一下知识。
 
目录
- 范数
 - 示例 1: 计算向量的 L2 范数(欧几里得范数)
 - 示例 2: 计算矩阵的 Frobenius 范数
 - 示例 3: 计算向量的 L1 范数(曼哈顿距离)
 - 曼哈顿范数的定义
 
- 曼哈顿范数的计算示例
 - 在Python中计算曼哈顿范数
 - 使用NumPy
 - 使用PyTorch
 
- 示例 4: 计算向量的无穷范数(最大值范数)
 - 示例 5: 计算矩阵的列范数
 - 示例 6: 计算矩阵的行范数
 - 示例 7: 计算高维张量的整体范数
 - 示例 8: 沿特定维度计算高维张量的范数
 - 示例 9: 沿多个维度计算高维张量的范数
 
范数
让我们通过具体的示例来详细说明如何使用 torch.linalg.norm 计算不同类型的范数,以及如何处理高维张量。
示例 1: 计算向量的 L2 范数(欧几里得范数)
import torch# 创建一个向量
vector = torch.tensor([3.0, 4.0])# 计算 L2 范数
l2_norm = torch.linalg.norm(vector, ord=2)print(f"L2 范数: {l2_norm}")  # 输出: 5.0
 
在这个例子中,计算的是向量 [3.0, 4.0] 的 L2 范数,其结果是 5.0。
 此处使用的是L2范数,也是norm的默认设置,其实就是平方根,类似于勾股定理的结果。
示例 2: 计算矩阵的 Frobenius 范数
# 创建一个矩阵
matrix = torch.tensor([[1.0, 2.0], [3.0, 4.0]])# 计算 Frobenius 范数
frobenius_norm = torch.linalg.norm(matrix, ord='fro')print(f"Frobenius 范数: {frobenius_norm}")  # 输出: 5.4772
 
在这个例子中,计算的是矩阵的 Frobenius 范数,即矩阵中所有元素的平方和的平方根。上面的结果也就是30的开方。
示例 3: 计算向量的 L1 范数(曼哈顿距离)
# 创建一个向量
vector = torch.tensor([3.0, 4.0]