关于数学运算
作者:互联网
加、减、乘、除
这里直接用 符号 + - * / 就可以运算,结果和用函数是一样的,不过都要满足能运算的条件,满足broadcasting,
a = torch.rand(3,4)
b = torch.rand(4)
c1 = a + b
c2 = torch.add(a,b)
d = torch.all(torch.eq(a-b,torch.sub(a,b))) #判断两种方法是否殊途同归
e = torch.all(torch.eq(a*b,torch.mul(a,b)))
f = torch.all(torch.eq(a/b,torch.div(a,b)))
print(c1,'\n',c2),print(d),print(e),print(f)
矩阵相乘
三种方法:
torch.mm : 只适用于二D的 tensor
torch.matmul :适合所有的 tensor
@ :和上一个一样,只不过更简洁,直接乘
a = torch.tensor([[3.,3.],[3.,3.]])
b = torch.ones(2,2)
o = torch.mm(a,b)
p = torch.matmul(a,b)
q = a @ b
print(a,'\n',b,'\n',o,'\n',p,'\n',q)
关于降维
x = torch.rand(4,784)
w = torch.rand(512,784) #要降维,pytorch中,第一个是output,第二个是input,
z = ( x @ w.t() ) #所以要转置在相乘降维->(4,512)
print(z.shape) #.t只适用于二D,以上要用transpose转换
关于matmul 的矩阵相乘
a = torch.rand(4,3,28,64)
b1 = torch.rand(4,3,64,32)
b2 = torch.rand(3,64,32) #matmul矩阵相乘是后两个维度乘,其他不变,能使用broadcasting
c1 = torch.matmul(a,b1) #其实就是支持多个矩阵对并行相乘
c2 = torch.matmul(a,b2)
print(c1.shape),print(c2.shape)
pow 、sqrt、rsqrt
三种方法对应
pow:指定tensor的次方,两种方式,
1、a.pow(次方 )
2、pow(a, 次方)
sqrt:开方,a.sqrt()
rsqrt:开方后的倒数
使用**也可以达到三种方法任意一种的效果
a = torch.full([2,2],3)
b = pow(a,2)
c = a.pow(2)
aa = a**2 #乘方
o1 = aa.sqrt()
o2 = aa**(1/2) #开方
p1 = aa.rsqrt()
p2 = aa**(-1/2) #开方倒数
print(b,'\n',c,'\n',aa),print(o1,'\n',o2)
print(p1,'\n',p2)
exp、log
exp表示对tensor进行e的次方
log默认底数为e,可以选择log2,log10
a = torch.exp(torch.tensor([[0,1],[2,3]]))
b = torch.log(a)
c = torch.tensor([4,8,16])
c1 = torch.log2(c)
print(a),print(b),print(c1)
近似取值方法
a.floor()表示对a向下取整
a.ceil()表示对a向上取整
a.trunc()表示对a 取整数部分
a.frac()表示对a 取小数部分
a.round()表示对a 四舍五入
a = torch.tensor(3.14)
a1 = a.floor()
a2 = a.ceil()
a3 = a.trunc()
a4 = a.frac()
b = torch.tensor(3.4999)
b1 = b.round() #四舍五入
c = torch.tensor(3.5)
c1 = c.round()
print(a1,'\n',a2,'\n',a3,'\n',a4)
print(b1,'\n',c1)
梯度裁剪
a.calmp( )
如果只给出一个值,相当于是最小值,a 中所有小于这个值的都变为这个值,其他不变
如果给两个值,表示限定在这个区间内,小于小的都变成小的,大于大的都变为大的 >-<
grad = torch.rand(2,3)*15
a = grad.max() #表示grad中最大值
b = grad.median() #表示中间值
c = grad.clamp(5,11)
print(a),print(b),print(c)
标签:rand,tensor,torch,matmul,数学,关于,print,c1,运算 来源: https://blog.csdn.net/m0_59310933/article/details/122760284