基本的运算操作类型:
Add/minus/multiply/divide 加减乘除 ,
Matmul 矩阵式相乘,
Pow 次方,Sqrt/rsqrt 开方,
Round 近似运算,Clamp取上下限。
基础的运算:加 +(add),减-(sub), 乘*(mul) ,除/(div)
a = torch.rand(3,4)
b=torch.rand(4)
print(a+b)
print(torch.add(a,b))
print(a-b)
print(torch.sub(a,b))
print(a*b) # element-wise
print(torch.mul(a,b))
print(a/b)
print(torch.div(a,b))
矩阵相乘 matmul
Torch.mm 矩阵的相乘 只适合于2d的tensor
Torch.matmul /@ 矩阵相乘,可以是2d以上的tensor,进行运算的时候取最后两个维度进行乘运算。建议使用。
2d的例子:
a = torch.ones(2,2)+torch.ones(2,2)
b=torch.ones(2,2)
print(torch.mm(a, b))
print(torch.matmul(a, b))
print(a@b)
超过2d的例子:
注意计算过程是:先广播机制,在乘运算:
使用@例子:
power次方操作:
a = torch.full([2,2],3)
print(a.pow(2))
print(a**2)
sqrt开方操作:
aa = a**2
print(aa)
print(aa.sqrt())
print(aa**(0.5))
Rsqrt() 表示平方根的倒数 用的比较少一点。
print(aa.rsqrt())
exp log 自然数,和自然对数:
构建自然数的tensor:
a = torch.exp(torch.ones(2,2))
print(a)
自然对数(log以e为底):
print(torch.log(a))
注意,log函数默认以e为底,要是以2为底就是log2(tensor),以n为底就是logn(tensor)。
近似值函数:
a=torch.tensor(3.14)
# 向下取整
print(a.float())
# 向上取整
print(a.ceil())
# 裁剪整数部分
print(a.trunc())
# 裁剪小数部分
print(a.frac())
# 四舍五入
a= torch.tensor(3.499)
print(a.round())
a = torch.tensor(3.5)
print(a.round())
Clamp函数:裁剪功能,常用于梯度裁剪。
(作用手动消除梯度爆炸或者消失)
常用情况:
For i in []:
Clamp(w.grad(1,10))
补充一个技巧:
查看梯度的模,W.grad.norm(2)==>表示梯度举证的第二范式。