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_第1张图片
    matmul矩阵相乘
      Torch.mm(only for 2d,不推荐),Torch.matmul, @等三种形式,计算如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4_第2张图片
      举一个神经网路中的线性层的例子,比如现在图片被压缩为[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_第3张图片
    Pow/sqrt/rsqrt:
      对矩阵来说,次方运算:a.pow(2),就表示对a中所有元素平方,当然,也可以用a**2,开方运算可以用a.sqrt(),而a.rsqrt()表示平方根的导数(用的不多),如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4_第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_第5张图片
    clamp:
      对于神经网络来说,可能存在梯度爆炸等问题,那么要进行裁剪,使用grad.clamp(10),可以将小于10的梯度变为10.000,使用rad.clamp(0,10),可以将数值限制在0-10之间。具体如下:
    PyTorch入门实战教程笔记(八):基础张量操作4_第6张图片

统计属性:

  • norm 求范数
  • mean,sum, prod 求均值,求和, 累乘
  • max, min, argmin, argmax 最大/小值,最大/小值的位置
  • kthvalue, topk 第几个位置和第几个的值,top几的数值
    norm
    关于范数,首先我们回顾一下向量范数和矩阵范数的区别,如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4_第7张图片
    现在我们通过torch.full([8],1)来构造全是1的一维张量:a= [1,1,1,1,1,1,1,1], 使b = a.view(2,4), c = a.view(2,2,2),可知,a的shape为[8],b的shape为[2.4],c的shape为[2,2,2],分别通过 . norm(1) 和 .norm(2)来计算a,b,c的1范数和2范数,具体如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4_第8张图片
    除此之外,norm的第二个参数为指定维度运算,取哪一个维度,哪一个维度就会消掉,比如求b的dim=1的norm,b本来的shape为[2,4],dim=1的1范数运算后结果为[4., 4.],shape为[2],再如c的dim=0的norm,c本来的shape为[2,2,2],dim=0的1范数运算后结果为([ [2., 2.], [2., 2.] ]), shape为[2, 2],具体运算结果如下:
    PyTorch入门实战教程笔记(八):基础张量操作4_第9张图片
    mean,sum, prod, max, min, argmin, argmax
      sum,max,min求得具体的相对应的(和、最大、最小)tensor值,mean求得所有数据相加除以数据size的平均值,prod是将所有数据累乘,而argmin和argmax返回数值最大的tensor的位置,注意 该位置为将数据打平为一维的索引号,而不是原来shape的位置,比如,shape为[2,4], 最大值在dim=1的第四个位置,而返回值为7,如下图所示:
    PyTorch入门实战教程笔记(八):基础张量操作4_第10张图片
    而若不想被打平为一维,想要实际对应的索引值,可以添加参数a.argmax(dim=1),具体如下图所示;
    PyTorch入门实战教程笔记(八):基础张量操作4_第11张图片
    dim,keepdim
    dim的作用前面已经说明,对于a.max(dim=1),不仅返回该dim对应的每一个维度下的最大值,还返回对应的序列号,如下所示:
    PyTorch入门实战教程笔记(八):基础张量操作4_第12张图片
    上述操作可以发现,虽然保留了相应的最大值以及最大值的索引值,但是shape变成了一维的[4],而不是原来的二维[4, 10],提取最大值后,我们希望其shape仍为二维[4, 1],可通过keepdim参数进行设置,如:a.max(dim=1, keepdim = Ture), 具体如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4_第13张图片
    topk or kthvalue
    我们知道,在图像处理时,top-1和top-5是衡量算法的指标,top-k比max的优势在于能够返回我们所需要的top k个数据的值及索引号,比如topk(3,dim=1), 返回dim=1维度的前3个最大的数值(已按从大到小排序),而如果要求前3个最小的数值(已按从小到大排序),可设置largest=False,具体效果如下图:
    PyTorch入门实战教程笔记(八):基础张量操作4_第14张图片

你可能感兴趣的:(PyTorch实战学习笔记)