引言
前序學習進程中,已經對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∑n?xi2??代碼示例:
# 導入包
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∑n?j=1∑m?xij2??代碼示例:
# 導入包
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’列矩陣范數的計算進行了探索。