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

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

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


目录

第1章 什么是范数

1.1 常见的范数与定义

1.2 范数的物理意义

1.3 代码演示的前置条件

1.4 范数的函数说明: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 范数的物理意义

一范数:先求出所有样本点的误差值的和,然后使其最小时,则找到的拟合函数是最好的。

无穷范数:先找出所有样本点的误差值中的最大值,然后使其最小,找到的拟合函数是最好的。

二阶范数:所有样本点的误差值的平方和,然后使其最小时,则找到的拟合函数是最好的。

二阶范数就是最小二乘法求误差最小值的评判方法。

1.3 代码演示的前置条件

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

1.4 范数的函数说明: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

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值