tensor数学运算

运算函数
add
sub
mul
div
矩阵相乘matmul
次方pow
平方根及其倒数sqrt 和 rsqrt
向下/向上取整floor / ceil
分离出整数/小数trunc / frac
近似解四舍五入round
裁剪clamp

1、矩阵元素的加减乘除

注意是矩阵间对应位置元素进行加减乘除

add 和 +

a = torch.rand(3,4)
b = torch.rand(4)

a+b
torch.add(a,b)
# 直接用符号或add函数效果一样,且tensor有broadcast自动扩展b的shape为(3,4)

torch.all(torch.eq(a+b,torch.add(a,b))

在这里插入图片描述

sub 和 -

在这里插入图片描述

mul 和 *

在这里插入图片描述

div 和 /

在这里插入图片描述

2、矩阵相乘 matmul和@

三种方式:

1、torch.mm
2、torch.matmul
3、运算符@

#其中,mm只支持2d的tensor,不建议使用。直接用matmul或者运算符@

在这里插入图片描述

以神经网络中的线性层为例:
将shape为(4,784)的x降维度到(4,512)

x = torch.rand(4,784)

w = torch.rand(512,784)
#pytorch的习惯写法是out维度在前,要@运算的时候将w转置即可

(x@w.t()).shape

在这里插入图片描述
多维情况下的matmul
依旧只对后两维矩阵进行相乘,并且还是有broadcast自动扩展机制

a = torch.rand(4, 3, 28, 64)
b = torch.rand(4, 3, 64, 32)
torch.matmul(a,b).shape

b = torch.rand(4, 1, 64, 32)
torch.matmul(a,b).shape

在这里插入图片描述

3、次方运算

① 次方 pow 或 **
a.pow(x)
#a为张量,x为次方数

a = torch.full([2,2],3)
a.pow(2)
a**2

在这里插入图片描述
② 平方根 sqrt
a.sqrt()相当于 a**(0.5)

aa = a**2

aa.sqrt()

aa**(0.5)

在这里插入代码片
③rsqrt
a.rsqrt() 是a.sqrt()结果的倒数
也可以是a.sqrt()**(-1)

aa.rsqrt()

aa.sqrt()**(-1)

在这里插入图片描述
总结:所有的次方运算都可以用pow()或运算符**实现

4、近似解运算

例子:
a=torch.tensor(3.14)
a.floor()向下取整得到3
a.ceil()向上取整得到4
a.trunc()分离出整数部分3
a.frac()分离出小数部分0.14
a.round()四舍五入得到3
在这里插入图片描述

5、裁剪运算

用的较多的是梯度裁剪
在这里插入图片描述

grad = 15 * torch.rand(2,3)
grad.max()

grad

grad.clamp(10)
#只有一个参数10表示限定grad中元素数值最小为10

grad.clamp(9,10)
#限制最小为9,最大为10

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值