Pytorch基础 - 2. torch.linalg.norm() 和 torch.linalg.vector_norm() 和 torch.linalg.matrix_norm()

本文详细介绍了PyTorch中的torch.linalg.norm()、torch.linalg.vector_norm()和torch.linalg.matrix_norm()函数,包括它们的参数、用法及范数类型,通过示例解释了不同维度和范数计算的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. torch.linalg.norm() 

2. torch.linalg.vector_norm()

3. torch.linalg.matrix_norm()


最近在写程序的时候,用到了L2范数,也因此了解到了这几个函数torch.norm()【已弃用】,torch.linalg.norm(),torch.linalg.matrix_norm(),torch.linalg.vector_norm()。

1. torch.linalg.norm() 

 该函数能够计算向量/矩阵/范数,首先献上官方文档:torch.linalg.norm — PyTorch 1.13

torch.linalg.norm(Aord=Nonedim=Nonekeepdim=False*out=Nonedtype=None)

(1) ord是指定的范数,默认None,为F-范数(2-范数)。当p='nuc'时为核范数,剩下的可看文档。

(2) dim为指定求范数的维度

  • 如果dim是一个int,将计算向量范数。
  • 如果dim是一个二元组,将计算矩阵范数。
  • 如果dim= None和ord= None,则A将被展为1D,并计算结果向量的2范数。
  • 如果dim= None和ord != None,则A必须是1D或2D。

(3)  keepdim指是否保留dim指定的维度

示例1:dim和ord均为None,即默认A展平,计算向量的2-范数,下面是向量范数公式(当p=2时)

import torch
from torch import linalg as LA

if __name__ == '__main__':
    a = torch.arange(20).reshape(4, -1).float()
    f2 = LA.norm(a)
    print(f2)  # tensor(49.6991)
    
    # 验证
    f2_my = torch.sqrt(a.pow(2).sum())
    print(f2_my) # tensor(49.6991)

示例2:当指定维度为int时,计算的是该维度的向量范数。以下为示例和验证

import torch
from torch import linalg as LA

if __name__ == '__main__':
    a = torch.arange(20).reshape(4, -1).float()
    f2 = LA.norm(a, dim=0)
    print(f2)  # tensor([18.7083, 20.3470, 22.0454, 23.7908, 25.5734])

    # 验证
    f2_my = torch.sqrt(a.pow(2).sum(dim=0))
    print(f2_my) # tensor([18.7083, 20.3470, 22.0454, 23.7908, 25.5734])

 示例3:当指定维度为二元组时,计算的是该维度的矩阵范数。

import torch
from torch import linalg as LA

if __name__ == '__main__':
    a = torch.arange(8).reshape(2, 2, 2).float()
    f2 = LA.norm(a, dim=(1, 2))
    print(f2, f2.shape)  # tensor([ 3.7417, 11.2250]), torch.Size([2])
    
    f2_keepdim = LA.norm(a, dim=(1, 2), keepdim=True)
    print(f2_keepdim, f2_keepdim.shape)   # tensor([[[ 3.7417]], [[11.2250]]]), torch.Size([2, 1, 1])

例子中给出了dim=(1, 2)是指计算dim=1和dim=2的矩阵范数,所以结果f2_keepdim是维度1和2的shape是1,维度为0的shape不变。同时例子中也验证了keepdim这个参数的用法,即默认是False,会把结果展平到一维,若为True的话,会保留原始的shape。

torch.linalg.norm()包含矩阵和向量范数,更具体的可以使用 torch.linalg.vector_norm()来计算向量范数,使用torch.linalg.matrix_norm()来计算矩阵范数。

2. torch.linalg.vector_norm()

torch.linalg.vector_norm(xord=2dim=Nonekeepdim=False*dtype=Noneout=None)

 基本用法和norm一样,具体可参考torch.linalg.vector_norm — PyTorch 1.13 documentation

(1) ord是指定的范数:默认是2

(2) dim为指定求范数的维度:

  • 如果dim= None,则将x拉平再计算范数。
  • 如果dim是int或tuple,则将在这些维度上计算范数。

示例4: 直接将示例1中的LA.norm更改成LA.vector_norm即可

from torch import linalg as LA

if __name__ == '__main__':
    a = torch.arange(20, dtype=torch.float).reshape((4, -1)
    f2 = LA.vector_norm(a, ord=2)
    print(f2)

3. torch.linalg.matrix_norm()

torch.linalg.matrix_norm(Aord='fro'dim(- 2, - 1)keepdim=False*dtype=Noneout=None)

基本用法和norm也是一致的,具体参考torch.linalg.matrix_norm — PyTorch 1.13 documentation

(1) ord指指定范数,下图为官网截图

 示例5:直接将示例3中的LA.norm更改为LA.matrix_norm即可

import torch
from torch import linalg as LA

if __name__ == '__main__':
    a = torch.arange(8).reshape(2, 2, 2).float()
    f2 = LA.matrix_norm(a, dim=(1, 2))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值