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))

tensor数学运算_第1张图片

sub 和 -

tensor数学运算_第2张图片

mul 和 *

tensor数学运算_第3张图片

div 和 /

tensor数学运算_第4张图片

2、矩阵相乘 matmul和@

三种方式:

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

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

tensor数学运算_第5张图片

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

x = torch.rand(4,784)

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

(x@w.t()).shape

tensor数学运算_第6张图片
多维情况下的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

tensor数学运算_第7张图片

3、次方运算

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

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

tensor数学运算_第8张图片
② 平方根 sqrt
a.sqrt()相当于 a**(0.5)

aa = a**2

aa.sqrt()

aa**(0.5)

tensor数学运算_第9张图片
③rsqrt
a.rsqrt() 是a.sqrt()结果的倒数
也可以是a.sqrt()**(-1)

aa.rsqrt()

aa.sqrt()**(-1)

tensor数学运算_第10张图片
总结:所有的次方运算都可以用pow()或运算符**实现

4、近似解运算

例子:
a=torch.tensor(3.14)
a.floor()向下取整得到3
a.ceil()向上取整得到4
a.trunc()分离出整数部分3
a.frac()分离出小数部分0.14
a.round()四舍五入得到3
tensor数学运算_第11张图片

5、裁剪运算

用的较多的是梯度裁剪
tensor数学运算_第12张图片

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

grad

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

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

tensor数学运算_第13张图片

你可能感兴趣的:(pytorch,深度学习,人工智能)