深度学习笔记之【einsum】的学习

einsum 是一种强大的矩阵计算工具,在深度学习框架中有实现。
今天在学习源码时看到这样一个式子,理解了很久,看懂了,所以记录一下。
原式如下:

x = torch.einsum('btdc,tw->bwdc', (x, A))

假设我有两个张量,维度分别是

x = torch.randint(1, 3, size=(1, 2, 3, 3))
A = torch.randint(1, 3, size=(2, 3))
print(x)
print(A)
tensor([[[[1, 1, 1],
          [2, 2, 1],
          [2, 2, 2]],

         [[1, 1, 1],
          [1, 1, 2],
          [1, 1, 2]]]])
tensor([[2, 1, 1],
        [1, 1, 2]])

通过einsum定义好规则后计算得到结果:

tensor([[[[3, 3, 3],
          [5, 5, 4],
          [5, 5, 6]],

         [[2, 2, 2],
          [3, 3, 3],
          [3, 3, 4]],

         [[3, 3, 3],
          [4, 4, 5],
          [4, 4, 6]]]])

分析:
btdc,tw->bwdc
x : ( b , t , d , c ) A : ( t w ) → ( b , w , d , c ) 可以看到  b ,  c 两个维度被保留了下来,而  w  只出现在 A 和输出中, 所以  w 是从  A 中得到的维度, t 同时出现在  x 和  A 中而在输出中不存在,说明在这个维度上进行了求和 \small x: (b,t,d,c)\\ \small A:(tw)\\ \small \rightarrow (b,w,d,c) \\ \small 可以看到\ b,\ c 两个维度被保留了下来,而\ w\ 只出现在A和输出中,\\ \small 所以\ w 是从\ A中得到的维度,\\ \small t 同时出现在 \ x 和 \ A中而在输出中不存在,说明在这个维度上进行了求和 x:(b,t,d,c)A:(tw)(b,w,d,c)可以看到 b c两个维度被保留了下来,而 w 只出现在A和输出中,所以 w是从 A中得到的维度,t同时出现在 x A中而在输出中不存在,说明在这个维度上进行了求和
从具体的例子中看运算规则:
本例中 t = 2,从 x 中 t 的维度上看就是两个 3 x 3 的矩阵,而从 A 中 t 的维度上看 是一个 2 x 1 的矩阵,举例说明:
从 x 中 t 的维度看到的两个矩阵
( 1 2 2 2 2 2 2 2 1 ) 和  ( 1 1 2 1 1 1 2 2 2 ) \begin{pmatrix} 1 & 2 & 2 \\ 2 & 2 & 2 \\ 2 & 2 & 1 \\ \end{pmatrix} 和\ \begin{pmatrix} 1 & 1 & 2 \\ 1 & 1 & 1 \\ 2 & 2 & 2 \\ \end{pmatrix} 122222221   112112212
从 A 中 t 的维度看到的矩阵
( 2 1 ) 和  ( 2 1 ) 和  ( 2 1 ) \begin{pmatrix} 2 \\ 1 \end{pmatrix} 和\ \begin{pmatrix} 2 \\ 1 \end{pmatrix} 和\ \begin{pmatrix} 2 \\ 1 \end{pmatrix} (21) (21) (21)
举其中一个例子:
在这里插入图片描述
剩下的两个计算方法相同。
初学者的理解,莫见笑

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值