PyTorch入门实战教程笔记(八):基础张量操作4

PyTorch入门实战教程笔记(八):基础张量操作4

包含:数学运算,统计属性,高阶操作

数学运算:

  • Add/minus/multiply/divide:加减乘除基本运算(数学运算)
  • Matmul:Tensor的矩阵式相乘(矩阵形式)
  • Pow:矩阵的次方
  • sqrt/rsqrt:矩阵的次方根
  • Round:矩阵近似运算
    Add/minus/multiply/divide:
    基本运算:
      加减乘除可以用+-* /,也可以用add(a,b),sub(a,b),mul(a,b),div(a,b),并且两者运算基本是一样的,需要指出的是,比如现在a的size为[3,4], b的size为[4],他们也是可以直接相加的,为什么呢,之前说过的,因为torch有Broadcasting自动扩展机制,可以直接自动把b扩展为[1,4],再到[3,4]。然后进行相加。如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4
    matmul矩阵相乘
      Torch.mm(only for 2d,不推荐),Torch.matmul, @等三种形式,计算如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4
      举一个神经网路中的线性层的例子,比如现在图片被压缩为[4,784],要想将其降维为784——>512,那么矩阵相乘一个维度为[784,512]的矩阵W是不是就可以实现,但是PyTorch中的w默认参数第一个为ch-out,第二个为ch-in,所以用w = torch.rand(512,784),那么在矩阵相乘之前来进行一个转置( .t()操作,适合2d维度的),如下图。 此外,对于高维的比如4dim的a=torch.rand(4,3,28,64),b=torch.rand(4,3,64,32),那么用torch.matmul(a,b)即可运算,运算时前面的Batchsize、channel不变,只对后面的进行矩阵相乘。如果b=torch.rand(4,1,64,32),也是可以运算的,因为Broadcasting可以将b自动扩展为[4,3,64,32]。
    PyTorch入门实战教程笔记(八):基础张量操作4
    Pow/sqrt/rsqrt:
      对矩阵来说,次方运算:a.pow(2),就表示对a中所有元素平方,当然,也可以用a**2,开方运算可以用a.sqrt(),而a.rsqrt()表示平方根的导数(用的不多),如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4
    Round近似计算:
      torch.exp表示e的次方数,比如:a = torch.exp(torch.ones(2,2)),生成即两行两列的矩阵,且数值均为e的1次方,也就是e. 此外,应注意,torch中的log是e的对数,也就是相当于ln,如果想用10的对数用log10(). 几个近似的函数:a.floor(3.14)表示直接取整数3, a.ceil(3.14)表示进位取整数4,a.trunc(3.14)表示取整数3, a.frac(3.14)表示取小数0.1400. 而四舍五入用a.round()如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4
    clamp:
      对于神经网络来说,可能存在梯度爆炸等问题,那么要进行裁剪,使用grad.clamp(10),可以将小于10的梯度变为10.000,使用rad.clamp(0,10),可以将数值限制在0-10之间。具体如下:
    PyTorch入门实战教程笔记(八):基础张量操作4

统计属性: