[Pytorch系列-18]:Pytorch基础 - 张量的范数

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Pytorch系列-18]:Pytorch基础 - 张量的范数相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119707901


目录

第1章 什么是范数

1.1 常见的范数与定义

1.2 代码演示的前置条件

1.3 范数的函数说明:torch.norm(input, p='fro', dim=None)

第3章 多阶范数

3.1 一阶范数

3.2 二阶范数

3.3 无穷阶范数

第4章 指定维度方向上的范数

4.1 dim =0方向上的范数

4.2 dim =1方向上的范数



第1章 什么是范数

1.1 常见的范数与定义

范数简单的讲,就是某个向量X(x0,x1,x3.....xn)的“长度”。

为了根据向量的每个元素值计算该向量的“长度”,可以有不同的规则,即所谓的范数的阶数,这些规则,称为范数的阶数,常见的阶数有:

 

一阶范数:使用每个向量元素的绝对值的和,来作为向量的长度。

二阶范数:使用每个向量元素的平方的和,再开根号,来作为向量的长度。

无穷阶范数:使用所有向量元素中,绝对值最大的值,作为向量的长度。

其中使用最广泛的方式就是二阶范数,原因有二:(1)二阶范畴最接近几何意义;(2)平方和开根号,可以进行求导,而一阶和无穷阶范数都时绝对值,不能求导数。

1.2 代码演示的前置条件

#环境准备
import numpy as np
import torch
 
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())

1.3 范数的函数说明:torch.norm(input, p='fro', dim=None)

功能说明:求张量元素的范数

参数说明:

  • input:输入张量
  • p:范数阶数,如1,2,np.inf (无穷)
  • dim:维度方向

第3章 多阶范数

3.1 一阶范数

# 代码示例:

print("源张量")
a = torch.Tensor([[-1.,1.],[1.,-1.]])
print(a)

print("\\n范数:全部元素,1阶范数") 
b = torch.norm(a, p = 1)   # 1阶范数:每个元素绝对值的和
print(b)

输出 :

源张量
tensor([[-1.,  1.],
        [ 1., -1.]])

范数:全部元素,1阶范数
tensor(4.)

3.2 二阶范数

# 代码示例

print("源张量")
a = torch.Tensor([[-1.,1.],[1.,-1.]])
print(a)

print("\\n范数:全部元素,2阶范数")
b = torch.norm(a, p = 2)  #  2阶范数:每个元素平方的和,再开平方根号
print(b)

print("\\n范数:默认全部元素,2阶范数")
b = torch.norm(a)
print(b)

输出:

源张量
tensor([[-1.,  1.],
        [ 1., -1.]])

范数:全部元素,2阶范数
tensor(2.)

范数:默认全部元素,2阶范数
tensor(2.)

3.3 无穷阶范数

#代码示例:

print("源张量")
a = torch.Tensor([[-1.,1.],[1.,-1.]])
print(a)

print("\\n范数:全部元素,无穷范数")
b = torch.norm(a, p = np.inf)  #  无穷阶范数:绝对值中的最大值
print(b)

输出:

源张量
tensor([[-1.,  1.],
        [ 1., -1.]])

范数:全部元素,无穷范数
tensor(1.)

第4章 指定维度方向上的范数

4.1 dim =0方向上的范数

#代码示例:

print("源张量")
a = torch.Tensor([[-1.,1.],[2.,-2.]])
print(a)

print("\\n范数:axis=0,2阶范数")
b = torch.norm(a,p=2, dim=0)
print(b)

输出:

源张量
tensor([[-1.,  1.],
        [ 2., -2.]])

范数:axis=0,2阶范数
tensor([2.2361, 2.2361])

4.2 dim =1方向上的范数

#代码示例:

print("源张量")
a = torch.Tensor([[-1.,1.],[2.,-2.]])
print(a)

print("\\n范数:axis=1,2阶范数")
b = torch.norm(a,p=2, dim=1)
print(b)

输出:

源张量
tensor([[-1.,  1.],
        [ 2., -2.]])

范数:axis=1,2阶范数
tensor([1.4142, 2.8284])

 作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119707901

以上是关于[Pytorch系列-18]:Pytorch基础 - 张量的范数的主要内容,如果未能解决你的问题,请参考以下文章

[Pytorch系列-20]:Pytorch基础 - Varialbe变量的手工求导和自动链式求导

[Pytorch系列-22]:Pytorch基础 - Autograd库 Autograd.Function与反向自动求导机制

[Pytorch系列-21]:Pytorch基础 - 反向链式求导的全过程拆解

[Pytorch系列-19]:Pytorch基础 - Variable变量的使用方法与 Tensor变量的比较

[PyTroch系列-16]:PyTorch基础 - 张量的操作 - 变形

[PyTroch系列-13]:PyTorch基础 - 张量的操作 - 筛选过滤