引言
前序学习进程中,已经对pytorch基本运算有了详细探索,文章链接有:
基本运算
广播失效
乘除法和幂运算
hadamard积、点积和矩阵乘法
上述计算都是以pytorch张量为运算元素,这些张量基本上也集中在一维向量和二维矩阵,此时也必不可少会涉及到另一个重要概念:范数。
今天的学习目标就是掌握范数的基本定义和计算方法。
范数
本次主要讨论L1和L2范数。
L2范数
欧几里得距离是一个L2范数:假设n维向量x中的元素是x1,…,xn,其L2范数是向量元素平方和的平方根:
∥
x
∥
2
=
∑
i
=
1
n
x
i
2
\left \| x \right \|_{2}=\sqrt{\sum _{i=1}^{n}x_{i}^{2}}
∥x∥2=i=1∑nxi2代码示例:
# 导入包
import torch
# 生成多维张量
y=torch.tensor([1.0,3.0])
# L2范数计算
z=torch.norm(y)
# 打印
print(z)
# L2平方
t=z*z
# 打印
print(t)
代码运行效果为:
L1范数
L1范数:假设n维向量x中的元素是x1,…,xn,其L1范数是向量元素绝对值的和:
∥
x
∥
1
=
∑
i
=
1
n
∣
x
i
∣
\left \| x \right \|_{1}=\sum _{i=1}^{n} \left | {x_{i}} \right |
∥x∥1=i=1∑n∣xi∣代码示例:
# 导入包
import torch
# 生成多维张量
y=torch.tensor([6.0,8.0])
# L2范数计算
z=torch.norm(y)
# 打印
print(z)
# L2平方
t=z*z
# 打印
print(t)
# L1范数计算
p=torch.abs(y).sum()
# 打印
print(p)
代码运行效果为:
矩阵范数
在已经讨论L1和L2范数的基础上,可以很直接地理解一个n行m列矩阵的范数计算公式应当为:
∥
x
∥
2
=
∑
i
=
1
n
∑
j
=
1
m
x
i
j
2
\left \| x \right \|_{2}=\sqrt{\sum _{i=1}^{n}\sum _{j=1}^{m}x_{ij}^{2}}
∥x∥2=i=1∑nj=1∑mxij2代码示例:
# 导入包
import torch
# 生成多维张量,5x5纯1矩阵
y=torch.ones([5,5])
# 打印
print('矩阵=',y)
# L2范数计算
z=torch.norm(y)
# 打印
print('L2=',z)
# L2平方
t=z*z
# 打印
print('L2*L2=',t)
# L1范数计算
p=torch.abs(y).sum()
# 打印
print('L1',p)
代码运行效果为:
总结
学习了L1和L2范数的基本定义,对n行m’列矩阵范数的计算进行了探索。