Pytorch Tensor基本数学运算详解
1.加法运算
示例代码:
importtorch #这两个Tensor加减乘除会对b自动进行Broadcasting a=torch.rand(3,4) b=torch.rand(4) c1=a+b c2=torch.add(a,b) print(c1.shape,c2.shape) print(torch.all(torch.eq(c1,c2)))
输出结果:
torch.Size([3,4])torch.Size([3,4]) tensor(1,dtype=torch.uint8)
2.减法运算
示例代码:
a=torch.rand(3,4) b=torch.rand(4) c1=a-b c2=torch.sub(a,b) print(c1.shape,c2.shape) print(torch.all(torch.eq(c1,c2)))
输出结果:
torch.Size([3,4])torch.Size([3,4]) tensor(1,dtype=torch.uint8)
3.哈达玛积(elementwise,对应元素相乘)
示例代码:
c1=a*b c2=torch.mul(a,b) print(c1.shape,c2.shape) print(torch.all(torch.eq(c1,c2)))
输出结果:
torch.Size([3,4])torch.Size([3,4]) tensor(1,dtype=torch.uint8)
4.除法运算
示例代码:
c1=a/b c2=torch.div(a,b) print(c1.shape,c2.shape) print(torch.all(torch.eq(c1,c2)))
输出结果:
torch.Size([3,4])torch.Size([3,4]) tensor(1,dtype=torch.uint8)
5.矩阵乘法
(1)二维矩阵相乘
二维矩阵乘法运算操作包括torch.mm()、torch.matmul()、@,
示例代码:
importtorch a=torch.ones(2,1) b=torch.ones(1,2) print(torch.mm(a,b).shape) print(torch.matmul(a,b).shape) print((a@b).shape)
输出结果:
torch.Size([2,2]) torch.Size([2,2]) torch.Size([2,2])
(2)多维矩阵相乘
对于高维的Tensor(dim>2),定义其矩阵乘法仅在最后的两个维度上,要求前面的维度必须保持一致,就像矩阵的索引一样并且运算操只有torch.matmul()。
示例代码:
c=torch.rand(4,3,28,64) d=torch.rand(4,3,64,32) print(torch.matmul(c,d).shape)
输出结果:
torch.Size([4,3,28,32])
注意,在这种情形下的矩阵相乘,前面的"矩阵索引维度"如果符合Broadcasting机制,也会自动做广播,然后相乘。
示例代码:
c=torch.rand(4,3,28,64) d=torch.rand(4,1,64,32) print(torch.matmul(c,d).shape)
输出结果:
torch.Size([4,3,28,32])
6.幂运算
示例代码:
importtorch a=torch.full([2,2],3) b=a.pow(2)#也可以a**2 print(b)
输出结果:
tensor([[9.,9.], [9.,9.]])
7.开方运算
示例代码:
c=b.sqrt()#也可以a**(0.5) print(c) d=b.rsqrt()#平方根的倒数 print(d)
输出结果:
tensor([[3.,3.], [3.,3.]]) tensor([[0.3333,0.3333], [0.3333,0.3333]])
8.指数与对数运算
注意log是以自然对数为底数的,以2为底的用log2,以10为底的用log10
示例代码:
importtorch a=torch.exp(torch.ones(2,2))#得到2*2的全是e的Tensor print(a) print(torch.log(a))#取自然对数
输出结果:
tensor([[2.7183,2.7183], [2.7183,2.7183]]) tensor([[1.,1.], [1.,1.]])
9.近似值运算
示例代码:
importtorch a=torch.tensor(3.14) print(a.floor(),a.ceil(),a.trunc(),a.frac())#取下,取上,取整数,取小数 b=torch.tensor(3.49) c=torch.tensor(3.5) print(b.round(),c.round())#四舍五入
输出结果:
tensor(3.)tensor(4.)tensor(3.)tensor(0.1400) tensor(3.)tensor(4.)
10.裁剪运算
即对Tensor中的元素进行范围过滤,不符合条件的可以把它变换到范围内部(边界)上,常用于梯度裁剪(gradientclipping),即在发生梯度离散或者梯度爆炸时对梯度的处理,实际使用时可以查看梯度的(L2范数)模来看看需不需要做处理:w.grad.norm(2)。
示例代码:
importtorch grad=torch.rand(2,3)*15#0~15随机生成 print(grad.max(),grad.min(),grad.median())#最大值最小值平均值 print(grad) print(grad.clamp(10))#最小是10,小于10的都变成10 print(grad.clamp(3,10))#最小是3,小于3的都变成3;最大是10,大于10的都变成10
输出结果:
tensor(14.7400)tensor(1.8522)tensor(10.5734) tensor([[1.8522,14.7400,8.2445], [13.5520,10.5734,12.9756]]) tensor([[10.0000,14.7400,10.0000], [13.5520,10.5734,12.9756]]) tensor([[3.0000,10.0000,8.2445], [10.0000,10.0000,10.0000]])
以上这篇PytorchTensor基本数学运算详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。