【Pytorch】科研代码技巧—Einsum爱因斯坦求和约定

不知大家在看论文代码的时候是否会常常看见 torch.einsum(),这玩意儿看起来是真的抽象,但是深入了解后发现它原来这么好用

一、Introeduction 

einsum真名叫做爱因斯坦求和约定,用于简洁的表示转置、内积、外积、各种求和

先看看以下这个例子,有这样的一段代码

R=torch.einsum('ik,jk->ij',A,B)

 在Einsum中,箭头从左边到右边消失了什么参数,那公式前就加一个带什么参数的求和符。本案例中消失了k,因此我们需要在加上对带k的求和符,转化为数学公式如下

对数学敏感的小伙伴可能已经知道这个公式代表什么意思了。为了更好展示出来,便将其可视化

画完图之后我们可以直观的知道这就是将两个矩阵每行向量进行求内积

此外,它的底层代码就是套了很多层的for循环,如果我们不用Einsum来实现以上的功能估计要写半天了

二、Skill

是不是感觉上面的公式很简单神奇,是的Einsum诞生的初衷就是为了简化矩阵的运算,因此博主记录了以下几个常用的矩阵运算用Einsum来实现。假设有以下四个矩阵

 2.1 求某行、列、维度之和

# 行之和
R=torch.einsum('ij->i',A)

# 列之和
R=torch.einsum('ij->j',A)

# 某维度之和
R=torch.einsum('ijklmn->n',D)

2.2 所有元素之和

# 所有元素之和
R=torch.einsum('ijklmn->',D)

2.3 转置

# 转置
R=torch.einsum('ij->ji',A)

2.4 内积

# 内积
R=torch.einsum('ij,jk->ik',A,B)

2.5 外积

# 外积
R=torch.einsum('ij,ik->jk',A,C)

2.6 灵活相乘 

# 多维相乘
R=torch.einsum('ij,jk,lj->jk',A,B,C)
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
PyTorch中的`torch.einsum`函数是一个用于执行张量运算的强大工具。它可以根据指定的公式对输入张量进行操作,并生成输出张量。 引用\[1\]中提供了一些常见的用法示例。例如,可以使用`torch.einsum`计算矩阵的行和、列和以及某个维度的和。例如,可以使用`torch.einsum('ij->i', A)`计算矩阵A的行和,使用`torch.einsum('ij->j', A)`计算矩阵A的列和,使用`torch.einsum('ijklmn->n', D)`计算张量D在某个维度上的和。 引用\[2\]中提供了一些更复杂的用法示例。例如,可以使用`torch.einsum('ij,jk->ik', A, B)`计算矩阵A和B的内积,使用`torch.einsum('ij,ik->jk', A, C)`计算矩阵A和C的外积,使用`torch.einsum('ij,jk,lj->jk', A, B, C)`进行多维张量相乘。 引用\[3\]中提供了一个高阶张量运算的示例。在这个示例中,使用`np.einsum('ijk,jil->kl', a, b)`计算了两个3阶张量a和b的乘积,并生成了一个2阶张量o。这个示例中的公式解析为对i和j进行求和,然后将结果存储在输出张量的k和l位置上。 总之,`torch.einsum`是一个非常灵活和强大的函数,可以用于执行各种张量运算。它可以根据指定的公式对输入张量进行操作,并生成输出张量。 #### 引用[.reference_title] - *1* *2* [【Pytorch代码技巧--EinsumEinsum详解+常用写法](https://blog.csdn.net/ccaoshangfei/article/details/126995397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Pytorch中, torch.einsum详解。](https://blog.csdn.net/a2806005024/article/details/96462827)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北村南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值