从零开始深度学习Pytorch笔记(6)——张量的数学运算

共 2118字,需浏览 5分钟

 ·

2020-01-20 23:20

2a2135e126c1a8e8fd72f5a30f50340a.webp

a660f7db108e9bb28755adb3c795128b.webp

前文传送门:

从零开始深度学习Pytorch笔记(1)——安装Pytorch

从零开始深度学习Pytorch笔记(2)——张量的创建(上)

从零开始深度学习Pytorch笔记(3)——张量的创建(下)

从零开始深度学习Pytorch笔记(4)——张量的拼接与切分

从零开始深度学习Pytorch笔记(5)——张量的索引与变换


在该系列的上一篇,我们介绍了更多Pytorch中的张量的索引与变换,本文研究张量的数学运算。

张量的加减乘除运算

使用torch.add()张量相加

torch.add(input, other, out=None)

参数:

input:张量

other:另一个张量或者数值

以下是张量加上20(对应位置都加上20)

a = torch.randn(4)
a

d62f38414aa4b5e1d9446e1cf8900352.webp

torch.add(a, 20)

fcc8d65c4897101b8a400a925f7d4a70.webp

a = torch.randn(4)
a

以下是两个张量相加

bdd0a5c1732c90c0c9240849ad83da5b.webp

b = torch.randn(4)
b

e53eceb12f7932d6c1096213851a5f7c.webp

torch.add(a, b)

5cffb464554d3ec228d7a169823d1fdd.webp

使用torch.addcdiv()张量相加和相除

torch.addcdiv(input, value=1, tensor1, tensor2, out=None)

tensor2tensor1逐元素相除,然后乘以标量值value 并加到input

总之意思用公式表达为:input+value*tensor1/tensor2

t = torch.randn(13)
t1 = torch.randn(31)
t2 = torch.randn(13)
torch.addcdiv(t, 0.1, t1, t2)

这个较为复杂,因为维度不一致也可以操作,我将它拆解出来,请看:

t = torch.randn(13)
t

69eb6a9b1e42b9a55825167426592243.webp


t1 = torch.randn(31)
t1

0fdaaf170c48f82a8b5d7524a796db51.webp


t2 = torch.randn(31)
t2

1c543ed3aea2082eafd296ad77a53322.webp

t12 = t1/t2
t12

11d470b4cca2988292fe75c9f53c40a1.webp

t12*0.1

212faf8b7e30dc004dc32ffcb53ffac8.webp

#维度不同也可以相加
t12*0.1+t

703c97fa65767554213078f9fbc304e6.webp

以上的操作,用torch.addcdiv()一行就可以搞定,请看:

torch.addcdiv(t, 0.1, t1, t2)

3af4f7965b52d583922352a3644f66a7.webp

结果相同,你理解了对吧~

torch.addcmul()张量相加和相乘

addcmul(input, value=1, tensor1, tensor2, out=None)

input+value*tensor1*tensor2

类似上面的操作,只是把相除变成相乘了

t = torch.randn(13)
t1 = torch.randn(31)
t2 = torch.randn(13)
torch.addcdiv(t, 0.1, t1, t2)

6c988445f0c9a1cdd09dc1322a4f2d44.webp

使用torch.sub()张量相减

t1 = torch.rand(2,3)
t1

01e48b08ba19067c212ae2c728632507.webp

t2 = torch.rand(2,3)
t2

cdc2694f872f4ef8e890d7bdd266e598.webp

t = torch.sub(t1, t2)
print(t)

9dd4441c6312be5a3b72d20612f3bad4.webp

使用torch.mul()张量相乘

t1 = torch.rand(55)
t2 = torch.rand(55)
t = torch.mul(t1, t2)
print(t)

6ff6e79108dc0a91b5f8f80c29a62636.webp

使用torch.div()张量相除

t1 = torch.rand(55)
t2 = torch.rand(55)
t = torch.div(t1, t2)
print(t)

a7b0bb41257c25dcaa4e55c25738c091.webp

张量的对数,指数,幂函数运算

torch.log(input,out=None)#计算input的自然对数
torch.log10(input,out=None)#计算input的10为底的对数
torch.log2(input,out=None)#计算input的2为底的对数
torch.exp(input,out=None)#对输入input按元素求e次幂值,并返回结果张量,幂值e可以为标量也可以是和input相同大小的张量
torch.pow(input,out=None)#次方运算

其实以上的都差不多,那就举一个例子:

a = torch.randn(5)
a

324f664a9e6a3e40ba6d136b9d4019c7.webp

torch.log(a)

a0d4a37530429e355ebc6589648c3cc8.webp

张量的三角函数运算

torch.abs(input,out=None)#计算张量的每个元素绝对值
torch.acos(input,out=None)#返回一个新张量,包含输入张量每个元素的反余弦
torch.cosh(input,out=None)#返回一个新张量,包含输入input张量每个元素的双曲余弦
torch.cos(input,out=None)#返回一个新张量,包含输入input张量每个元素的余弦
torch.asin(input,out=None)#返回一个新张量,包含输入input张量每个元素的反正弦
torch.atan(input,out=None)#返回一个新张量,包含输入input张量每个元素的反正切
torch.atan2(input1, input2, out=None)#返回一个新张量,包含两个输入张量input1和input2的反正切函数

其实以上的都差不多,那就举一个例子:

a = torch.randn(5)

fd89282b78cb0a3d54fd37141fcdfedf.webp

torch.cos(a)

7205f91f9c742e90946fc70f18dfa598.webp


欢迎关注公众号学习之后的深度学习连载部分~


a401e9114a4983fe17aa39516788e9d3.webp喜欢记得点在看哦,证明你来看过~
浏览 79
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报