“左边是以逗号隔开的下标索引,重复出现的索引即是需要_p">
当前位置:   article > 正文

pytorch深度学习实战_pytorch深度学习实战 pdf

pytorch深度学习实战 pdf

3.4命名张量

einsum方法详解(爱因斯坦求和)

einsum是pytorch、numpy中一个十分优雅的方法,如果利用得当,可完全代替所有其他的矩阵计算方法,不过这需要一定的学习成本。本文旨在详细解读einsum方法的原理,并给出一些基本示例。
一、爱因斯坦求和

 爱因斯坦求和是一种对求和公式简洁高效的记法,其原则是当变量下标重复出现时,即可省略繁琐的求和符号。

比如求和公式:

 

其中变量 a 与变量 b 的下标是相同的(即重复出现),则可将其记为:

a_{i}b_{i}=\sum_{1}^{n}a_{i}b_{i}

 

二、einsum方法原理

einsum方法正是利用了爱因斯坦求和简介高效的表示方法,从而可以驾驭任何复杂的矩阵计算操作。基本的框架如下:

C = einsum('ij,jk->ik', A, B)

上述操作表示矩阵A与矩阵B的点积。输入的参数分为两部分,前面表示计算操作的字符串,后面是以逗号隔开的操作对象(数量需与前面对应)。其中在计算操作表示中,"->“左边是以逗号隔开的下标索引,重复出现的索引即是需要爱因斯坦求和的;”->"右边的是最后输出的结果形式。
以上式为例,其计算公式为: C_{ik}=\sum_{j}^{}A_{ij}B_{jk},其等价于矩阵A与B的点积。
这里有几条原则需要注意,之后也会和结合示例进行详解:

  1.     "->"左边的是对应维度,以逗号隔开
  2.     "->"右边的是最终output的形式
  3.     如果符号"->"被省略则代表输出为整体求和
  4.     "…"表示省略之前或之后的所有维度
  5.     einsum中涉及到的计算操作有很多,包括但不限于点积、对应元素相乘、求和、转置等
     

三、一些示例

einsum方法在numpy和pytorch中均有内置,这里以pytorch为例,首先定义一些需要用到的变量:

  1. import torch
  2. from torch import einsum
  3. a = torch.ones(3,4)
  4. b = torch.ones(4,5)
  5. c = torch.ones(6,7,8)
  6. d = torch.ones(3,4)
  7. x, y = torch.randn(5), torch.randn(5)
  1. 计算矩阵所有元素之和
    1. einsum('i,j', a) # 等价于einsum('i,j->', a)
    2. einsum('i,j,k', c)

  2. 计算矩阵的迹
    einsum('ii', a)
    

  3. 获取矩阵对角线元素组成的向量
    einsum('ii->i', a)
    

  4. 向量相乘得到矩阵
    einsum('i,j->ij', x, y)
    

  5. 矩阵点积
    einsum('ij,jk->ik', a, b)
    

  6. 矩阵对应元素相乘
    einsum('ij,ij->ij', a, d)
    

  7. 矩阵的转置
    1. einsum('ijk->ikj', c)
    2. einsum('...jk->...kj', c) # 两种形式等价

  8. 双线性运算
    1. A = torch.randn(3,5,4)
    2. l = torch.randn(2,5)
    3. r = torch.randn(2,4)
    4. torch.einsum('bn,anm,bm->ba', l, A, r)

  1. c = torch.tensor([[[[1., 2.],
  2. [3., 1.]],
  3. [[1., 1.],
  4. [4., 1.]],
  5. [[1., 1.],
  6. [1., 5.]]],
  7. [[[1., 2.],
  8. [3., 1.]],
  9. [[1., 1.],
  10. [4., 1.]],
  11. [[1., 1.],
  12. [1., 5.]]]]
  13. )
  14. d = torch.tensor([0.1, 0.2, 0.3])
  15. print(c.shape)
  16. e = torch.einsum('...chw,c->...hw', c,d)
  17. print(e)
  18. print(e.shape)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/1021455
推荐阅读
相关标签
  

闽ICP备14008679号