掌握Pytorch
学习内容
常用的数学运算:
加减乘除:这几个操作建议直接使用运算符。
| add | + |
|---|---|
| sub | - |
| mul | * |
| div | / |
| matmul | 矩阵相乘 |
|---|---|
| pow | 指数 |
| sqrt/rsqrt | 平方根/平方根倒数 |
| round | 四舍五入 |
(1)torch.add(input,other,*,alpha=1,out=None) → Tensor
outi=inputi+alpha×otheri
note: 当两个tensor维度不一致时,先进行broadcasting操作,再进行add。
a = torch.randn(4) #tensor([ 0.0202, 1.0985, 1.3506, -0.6056]) torch.add(a, 20) #tensor([ 20.0202, 21.0985, 21.3506, 19.3944])
b = torch.randn(4) #tensor([-0.9732, -0.3497, 0.6245, 0.4022]) c = torch.randn(4, 1) # tensor([[ 0.3743], # [-1.7724], # [-0.5811], # [-0.8017]]) torch.add(b, c, alpha=10) # tensor([[ 2.7695, 3.3930, 4.3672, 4.1450], # [-18.6971, -18.0736, -17.0994, -17.3216], # [ -6.7845, -6.1610, -5.1868, -5.4090], # [ -8.9902, -8.3667, -7.3925, -7.6147]])
(2)torch.sub(input, other, *, alpha=1, out=None) → Tensor
操作与torch.add类似。
outi=inputi-alpha×otheri
a = torch.tensor((1, 2)) b = torch.tensor((0, 1)) torch.sub(a, b, alpha=2) #tensor([1, 0])
(3)torch,matmul(input,other) → Tensor
当两个tensor都是一维时,返回两个向量的点积运算结果。
tensor1 = torch.randn(3) tensor2 = torch.randn(3) torch.matmul(tensor1, tensor2).size() #torch.Size([])
当两个tensor都是二维时,进行矩阵相乘。
tensor1 = torch.randn(2,2) tensor2 = torch.randn(2,3) torch.matmul(tensor1, tensor2).size() #torch.Size([2, 3])
当input为1维,other为2维时,在input前插入长度为1的新维度,使其扩充到二维,然后进行矩阵相乘,再将结果去掉插入的维度,得到的最终结果的维度与input的维度相同。
tensor1 = torch.randn(3) tensor2 = torch.randn(3,4) #将tensor1扩充成 (1,3),再与tensor2相乘得到(1,4),最后去掉添加的维度1 torch.matmul(tensor1,tensor2).size() #torch.Size([4])
当input为2维,other为1维时,在other后插入长度为1的新维度,使其扩充到二维,然后进行矩阵相乘,再将结果去掉插入的维度,得到的最终结果的维度与other的维度相同。
tensor1 = torch.randn(3,4) tensor2 = torch.randn(4) #将tensor2扩充成 (4,1),再与tensor2相乘得到(3,1),最后去掉添加的维度1 torch.matmul(tensor1,tensor2).size() #torch.Size([3])
将input和other都为多维时,将多出的维度提出来,其他部分做矩阵相乘。
tensor1 = torch.randn(2,3,4) tensor2 = torch.randn(4,6) #将tensor1的0维提出来,剩下的部分做矩阵相乘 torch.matmul(tensor1,tensor2).size() #torch.Size([2, 3, 6])
tensor1 = torch.randn(2,3,4) tensor2 = torch.randn(1,4,6) #将tensor2的0维1broadcast成2提出来,剩下的部分做矩阵相乘 torch.matmul(tensor1,tensor2).size() #torch.Size([2, 3, 6])
tensor1 = torch.randn(2,1,3,4) tensor2 = torch.randn(5,4,3) #将tensor1的0维2提出来,再将tensor1的1维1broadcast成5提出来,剩下的部分做矩阵相乘 torch.matmul(tensor1,tensor2).size() #torch.Size([2, 5, 3, 3])
(4)torch.row() :实现求指数操作,可以直接写成符号“**”
求平方也可以写成“ **2 ”
#创建一个每个元素都为3的2X2矩阵 a = torch.full([2,2],3) a.pow(2) #也可以写成a**2 # tensor([[9, 9], # [9, 9]])
(5)torch.sqrt(): 平方根
torch.rsqrt(): 平方根的倒数
求平方根可以写成“ **0.5”
#创建一个每个元素都为9的2X2矩阵 a = torch.full([2,2],9) a.sqrt() #也可以写成a**0.5 # tensor([[3., 3.], # [3., 3.]]) a.rsqrt() # tensor([[0.3333, 0.3333], # [0.3333, 0.3333]])
(6)
| torch.floor() | 向下取整 |
|---|---|
| torch.ceil() | 向上取整 |
| torch.trunc() | 拆分后取整数部分 |
| torch.frac() | 拆分后取小数部分 |
a = torch.tensor(3.14) a.floor() #tensor(3.) a.ceil() #tensor(4.) a.trunc() #tensor(3.) a.frac() #tensor(0.1400)
(7)torch.round()
a = torch.tensor(3.6) b = torch.tensor(2.1) a.round() #tensor(4.) b.round() #tensor(2.)
总结
又是元气满满的一天,加油



