目录

一、简介

1.哑标

2.自由标

二、torch实现

1.计算迹

2.取矩阵对角线

3.计算外积

4.batch矩阵乘法

5.带有子列表和省略号

6.变换维度

7.双线性变换,类似于torch.nn.functional.bilinear


一、简介

爱因斯坦求和约定(Einstein summation convention)是一种标记的约定, 又称为爱因斯坦标记法(Einstein notation), 可以基于一些约定简写格式表示多维线性代数数组操作,让表达式更加简洁明了。

既然是约定,那我们就来看看都约定了什么,主要有如下两点:

1.哑标

公式中不同字母分别有重复一次的上角标和下角标时,视为求和。下图中的i和j都是哑标。

2.自由标

在公式的每一项中,仅出现一次的下角标,代表一个维度,下图中i是自由标、j是哑标。

爱因斯坦和表示为

二、torch实现

Einsum在torch、tf和numpy中都有实现,而且用方式差不多,这里我们以torch为例。

总体思想是用一些下标标记输入的每个维度,并定义哪些下标是输出的一部分。然后,通过将操作中下标不属于输出的维度的元素的乘积求和来计算输出。下面是一些例子,还是很好理解的。

1.计算迹

没有显式的输出就是求和在输出。

torch.einsum('ii', torch.randn(4, 4))
# tensor(-1.2104)

2.取矩阵对角线

torch.einsum('ii->i', torch.randn(4, 4))
# tensor([-0.1034,  0.7952, -0.2433,  0.4545])

3.计算外积

x = torch.randn(5)
y = torch.randn(4)
torch.einsum('i,j->ij', x, y)
# tensor([[ 0.1156, -0.2897, -0.3918,  0.4963],
#         [-0.3744,  0.9381,  1.2685, -1.6070],
#         [ 0.7208, -1.8058, -2.4419,  3.0936],
#         [ 0.1713, -0.4291, -0.5802,  0.7350],
#         [ 0.5704, -1.4290, -1.9323,  2.4480]])

4.batch矩阵乘法

一行代码,将转置和乘法放在一起,确实很方便。

As = torch.randn(3,2,5)
Bs = torch.randn(3,5,4)
torch.einsum('bij,bjk->bik', As, Bs)
# tensor([[[-1.0564, -1.5904,  3.2023,  3.1271],
#          [-1.6706, -0.8097, -0.8025, -2.1183]],
#
#         [[ 4.2239,  0.3107, -0.5756, -0.2354],
#          [-1.4558, -0.3460,  1.5087, -0.8530]],
#
#         [[ 2.8153,  1.8787, -4.3839, -1.2112],
#          [ 0.3728, -2.1131,  0.0921,  0.8305]]])

5.带有子列表和省略号

As = torch.randn(3,2,5)
Bs = torch.randn(3,5,4)
torch.einsum(As, [..., 0, 1], Bs, [..., 1, 2], [..., 0, 2])
# tensor([[[-1.0564, -1.5904,  3.2023,  3.1271],
#          [-1.6706, -0.8097, -0.8025, -2.1183]],
#
#         [[ 4.2239,  0.3107, -0.5756, -0.2354],
#          [-1.4558, -0.3460,  1.5087, -0.8530]],
#
#         [[ 2.8153,  1.8787, -4.3839, -1.2112],
#          [ 0.3728, -2.1131,  0.0921,  0.8305]]])

6.变换维度

A = torch.randn(2, 3, 4, 5)
torch.einsum('...ij->...ji', A).shape
# torch.Size([2, 3, 5, 4])

7.双线性变换,类似于torch.nn.functional.bilinear

l = torch.randn(2,5)
A = torch.randn(3,5,4)
r = torch.randn(2,4)
torch.einsum('bn,anm,bm->ba', l, A, r)
# tensor([[-0.3430, -5.2405,  0.4494],
#         [ 0.3311,  5.5201, -3.0356]])

爱因斯坦求和约定 含代码einsum相关推荐

  1. 【深度学习】爱因斯坦求和约定(einsum)

    import tensorflow as tf print(tf.__version__) 2.0.0 一.爱因斯坦求和约定(einsum)的介绍 爱因斯坦求和约定是一种对复杂张量运算的优雅表达方式. ...

  2. tf.einsum—爱因斯坦求和约定

    1. einsum记法 如果你像我一样,发现记住PyTorch/TensorFlow中那些计算点积.外积.转置.矩阵-向量乘法.矩阵-矩阵乘法的函数名字和签名很费劲,那么einsum记法就是我们的救星 ...

  3. np.einsum(爱因斯坦求和约定)

    欢迎关注我的微信公号:小张Python einsum 全称 Einstein summation convention(爱因斯坦求和约定),用简单的方式来代表多维数组运算: 矩阵求各元素之和 A=∑i ...

  4. 一文掌握爱因斯坦求和约定 einsum

    爱因斯坦跟 NumPy 有关系吗?没有,但他提出了一个针对数学公式的符号简化办法,即爱因斯坦求和约定(Einstein Summation Convention)或者叫爱因斯坦标记法(Einstein ...

  5. MindSpore爱因斯坦求和约定API解析【mindspore.ops.Einsum】

    官方文档写了个寂寞,既非中文也只有示例没有解释,这谁看得懂?总体而言,这个API功能强大,但是,撰写API文档技术有待提高哈.接下来是本人实际测试该API的结果: 符号和参数: mindspore.o ...

  6. einsum爱因斯坦求和(numpy)

    0. 爱因斯坦求和约定(Einstein Notation) 在数学中,爱因斯坦求和约定是一种标记法,也称为Einstein Summation Convention,在处理关于坐标的方程式时十分有效 ...

  7. python 笔记:爱因斯坦求和 einsum

    1 einsum简介 使用爱因斯坦求和约定,可以以简单的方式表示许多常见的多维线性代数数组运算. 给定两个矩阵A和B,我们想对它们做一些操作,比如 multiply.sum或者transpose等.虽 ...

  8. 爱因斯坦求和约定在Python扩展库Numpy中的实现

    推荐教材: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,2020年1月出版,2021年12月第 ...

  9. 对于论文中Pytorch代码爱因斯坦求和einsum的理解

    论文代码中经常会用到torch.einsum(),其本质是对相同下标求和 举例 torch.einsum('nctv, vtq -> ncqv', (x,y)) ' -> '左边是两个或多 ...

最新文章

  1. 加速产业生态算力升级,华为鲲鹏展翅福州
  2. SAP MM 采购价格里的阶梯价格
  3. 过滤注入代码的存储过程
  4. Python机器学习笔记:sklearn库的学习
  5. centos下yum安装nginx
  6. Hyperledger Fabric 链码(1) 类型
  7. 资讯|WebRTC M93 更新
  8. vscode设置缩进2个空格
  9. c语言风景日历制作系统,初学,C语言日历制作
  10. echart雷达图文字挤在一起_【数据可视化·图表篇】雷达图
  11. 传统的分布式应用集成技术(网摘)
  12. 一年中所有节日的排列顺序_中国传统节日有哪些 按顺序排列全部
  13. Unity 之自动化打包ipa
  14. tda7415c参数_TDA7541TDA7415调试小结
  15. Appium 测试APK
  16. 微信小程序实现列表项左滑删除效果
  17. 香蕉派BPI-M6 采用深蕾半导体Vs680芯片设计,板载4G LPDDR4和16G eMMC存储
  18. python智力问答游戏_Python语言编写智力问答小游戏功能
  19. Springboot 国际化语言(浏览器切换)
  20. mysql 高手_求mysql高手

热门文章

  1. 关于程序员修改电脑用户名中文为字母那些事
  2. MicroFocus ALM Octane 12.55部署与简单试用(一)
  3. 2021-07-05 得力扫码枪使用。
  4. 中国十大最牛CEO简历
  5. 怎样把word转换成pdf文件
  6. 易语言大漠多线程foobar在游戏多窗口中时时显示输出信息
  7. InkCollector Signiture Made Easy
  8. Java 模板引擎总结
  9. 顺丰快递 | 快递单号查询API接口
  10. CSS tricks