在pytorch官方文档上,Tensor的数学操作方法有90多种,下图给了经常使用的25种数学操作方法(除线性代数运算外,线性运算下面会介绍)
方法 说明
add() Tensor中每个元素同加一个标量,或与另一个Tensor逐元素相加
mul() Tensor中每个元素同乘一个标量,或与另一个Tensor逐元素相乘
div() Tensor中每个元素同除一个标量,或与另一个Tensor逐元素相除
fmod()和remainder() Tensor中每个元素与一个标量的除法余数,相当于Python中的%操作
abs() 对Tensor中的每个元素取绝对值,并返回
ceil() 对Tensor中的每个元素向上取整
floor() 对Tensor中的每个元素向下取整
clamp() 对Tensor中的每个元素取上下限
round() 对Tensor中的每个元素取最近的整数
frac() 返回Tensor中每个元素的分数部分
neg() 对Tensor中的每个元素取负
reciprocal() 对Tensor中的每个元素取倒数
log() 返回一个张量,包含Tensor中每个元素的自然对数
pow() 对Tensor中的每个元素同取一个标量幂值,或采用另外一个Tensor的对应元素
取幂,或对标量采用Tensor的每个元素取幂
exp() 返回一个张量,包含Tensor中每个元素的指数
sigmoid() 返回一个张量,包含Tensor中的每个元素的sigmoid值
sign() 返回一个张量,包含Tensor中每个元素的正负值
sqrt() 返回一个张量,包含Tensor中每个元素的平方根
dist() 返回两个Tensor的范数
mean() 返回Tensor中所有元素的均值
norm() 返回Tensor的范数值
prod() 返回Tensor的所有元素之积
sum() 返回Tensor的 所有元素之和
max() 返回Tensor的所有元素的最大值
min() 返回Tensor的所有元素的最小值
Tensor的数学操作的实现方法一般由两种:
下面使用第一种方法,利用其中一个Tensor实例上的方法直接运算
a = torch.Tensor([[1,2,3],[4,5,6]])
a
tensor([[1., 2., 3.],
[4., 5., 6.]])
b = torch.ones(2,3)
b
tensor([[1., 1., 1.],
[1., 1., 1.]])
b.add(a)
tensor([[2., 3., 4.],
[5., 6., 7.]])
使用第二种方法实现加法操作,利用torch包的torch.add()方法:
torch.add(a,b)
tensor([[2., 3., 4.],
[5., 6., 7.]])
这里,我们介绍一下数学操作带下划线,返回值将覆盖对象,例如:
b.add_(a)
tensor([[2., 3., 4.],
[5., 6., 7.]])
b
tensor([[2., 3., 4.],
[5., 6., 7.]])
上列中,张量b与张量a相加的值覆盖张量b.
除了可以实现两个相同形状的Tensor相加外,还可以让Tensor中的每个与元素都同时加上一个标量,例如:
a = torch.rand(3)
a
tensor([0.3228, 0.7983, 0.1207])
a + 2
tensor([2.3228, 2.7983, 2.1207])
torch.add(a,2)
tensor([2.3228, 2.7983, 2.1207])
a.add(2)
tensor([2.3228, 2.7983, 2.1207])
下面再介绍另外4种常用的数学操作,其余的大家自行尝试,不会的或者不懂的可以私聊我。
torch.abs(torch.Tensor([[-5,-4,-3],[-3,-2,-1]]))
tensor([[5., 4., 3.],
[3., 2., 1.]])
a = torch.Tensor([0.2,1.5,3.4])
a
tensor([0.2000, 1.5000, 3.4000])
torch.ceil(a)
tensor([1., 2., 4.])
torch.exp(torch.Tensor([1,2,3]))
tensor([ 2.7183, 7.3891, 20.0855])
torch.max(torch.Tensor([1,2,3]))
tensor(3.)
上面介绍了数学操作运算,torch包中还包含了约12种线性代数运算的相关函数,接下来,我们简单介绍其中的3种方法运算。
a = torch.Tensor([1,2,3])
b = torch.Tensor([2,3,4])
torch.dot(a,b)
tensor(20.)
a = torch.Tensor([[1,2,3],[2,3,4],[3,4,5]])
a
tensor([[1., 2., 3.],
[2., 3., 4.],
[3., 4., 5.]])
b = torch.Tensor([1,2,3])
b
tensor([1., 2., 3.])
torch.mv(a,b)
tensor([14., 20., 26.])
a = torch.Tensor([[1,2,3],[2,3,4],[3,4,5]])
a
tensor([[1., 2., 3.],
[2., 3., 4.],
[3., 4., 5.]])
b = torch.Tensor([[4,5,6],[6,7,8],[8,9,10]])
b
tensor([[ 4., 5., 6.],
[ 6., 7., 8.],
[ 8., 9., 10.]])
torch.mm(a,b)
tensor([[ 40., 46., 52.],
[ 58., 67., 76.],
[ 76., 88., 100.]])
下面给大家,介绍一下如何记住上面的三个函数:
向量(vector),矩阵(matrix),所以矩阵和向量的mv()就是上面两个英文的缩写,mm()就是两个矩阵的缩写。
下面,分别介绍一下向量内积、矩阵和向量乘法,矩阵和矩阵乘法的原理。
1.两个向量的内积
2.矩阵向量乘法规则
3.矩阵和矩阵乘法
其他常见的线性代数操作:
方法 说明
dot() 两个向量点积
mv() 矩阵与向量相乘
mm() 两个矩阵相乘
addmm() 将两个矩阵进行矩阵乘法操作的结果与另一个矩阵相加
addmv() 将矩阵和向量相乘的结果与另一个向量相加
addr() 将两个向量进行张量积(外积)操作的结果与另一个矩阵相加
bmm() 两个batch内的矩阵进行批矩阵乘法
eig() 计算方阵的特征值和特征向量
ger() 两个向量的张量积
inverse() 对方阵求逆
addbmm() 将两个batch内的矩阵进行批矩阵乘法操作并累加,其结果与另一矩阵相加
baddbmm() 将两个batch内的矩阵进行批矩阵乘法操作,其结果与另一batch内的矩阵相加
好的,今天的分享就到这里,下周周日继续分享,下周分享链接和切片的操作以及CUDA加速,现在大几几乎每个人手里都有一个GPU,我也有的,笔记本的GTX1080虽然不太好。但是笔记本感觉已经够用了,当然还有一个台式的,当然不是我的,是实验室的。使用gpu进行计算也是常规操作。当然,看时间,如果下周日时间多,也介绍一些pytorch的自动微分(Autograd)的功能,这是神经网络里面经常用到的。