【pytorch】范数的计算

近日在看沐神的《动手学深度学习》,其中提到了范数这一数学概念,感觉很陌生,参考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]
上一篇:WaveletGPT:基于小波的多尺度表征增强大型语言模型训练效率


下一篇:【Vue3实战】:用导航守卫拦截未保存的编辑,提升用户体验