爱因斯坦简记法:是一种由爱因斯坦提出的,对向量、矩阵、张量的求和运算求和简记法

在该简记法当中,省略掉的部分是:1)求和符号与2)求和号的下标

省略规则为:默认成对出现的下标(如下例1中的i和例2中的k)为求和下标。

我们举例说明:

1)用简化表示内积

其中o为输出。

2) 用简化表示矩阵乘法

其中为输出矩阵的第ij个元素。

这样的求和简记法,能够以一种统一的方式表示各种各样的张量运算(内积、外积、转置、点乘、矩阵的迹、其他自定义运算),为不同运算的实现提供了一个统一模型。

因此,numpy和pytorch对它进行了实现。两者的语义一致,本文各举一例。

3)Torch矩阵乘法。

print(a_tensor)tensor([[11, 12, 13, 14],[21, 22, 23, 24],[31, 32, 33, 34],[41, 42, 43, 44]])print(b_tensor)tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3],[4, 4, 4, 4]])# 'ik, kj -> ij'语义解释如下:
# 输入a_tensor: 2维数组,下标为ik,
# 输入b_tensor: 2维数组,下标为kj,
# 输出output:2维数组,下标为ij。
# 隐含语义:输入a,b下标中相同的k,是求和的下标,对应上面的例子2的公式
output = torch.einsum('ik, kj -> ij', a_tensor, b_tensor)print(output)tensor([[130, 130, 130, 130],[230, 230, 230, 230],[330, 330, 330, 330],[430, 430, 430, 430]])

2)高阶张量运算的一个例子:

a = np.arange(60.).reshape(3,4,5)
b = np.arange(24.).reshape(4,3,2)# 语义解析:
# 输入a:3阶张量,下标为ijk
# 输入b: 3阶张量,下标为jil
# 输出o: 2阶张量,下标为k和l
# 隐含语义:对i,j进行求和,公式附于代码之后:
o = np.einsum('ijk,jil->kl', a, b)
print(o)array([[4400., 4730.],[4532., 4874.],[4664., 5018.],[4796., 5162.],[4928., 5306.]])# 验证:
print(np.sum(a[:,:,0]*b[:,:,0].T))4400.0print(np.sum(a[:,:,1]*b[:,:,0].T))4532.0

其公式为:

其语义为:O第k,l个元素:是矩阵A[:,:,k]和矩阵B[:,:,l]转置,对应元素相乘再求和。

其他例子请参考https://www.cnblogs.com/mengnan/p/10319701.html

Pytorch中, torch.einsum详解。相关推荐

  1. pytorch中resnet_ResNet代码详解

    代码学习第一天! fighting! import torch.nn as nn import math import torch.utils.model_zoo as model_zoo# 这个文件 ...

  2. Pytorch中expand_as()函数详解

    关于expand_as()的个人理解 from __future__ import print_function import torch as t# a = t.Tensor(2,3) # # pr ...

  3. PyTorch 中 torch.optim优化器的使用

    一.优化器基本使用方法 建立优化器实例 循环: 清空梯度 向前传播 计算Loss 反向传播 更新参数 示例: from torch import optim input = ..... optimiz ...

  4. torch.unsqueeze和 torch.squeeze() 详解

    1. torch.unsqueeze 详解 torch.unsqueeze(input, dim, out=None) 作用:扩展维度 返回一个新的张量,对输入的既定位置插入维度 1 注意: 返回张量 ...

  5. Pytorch中的einsum

    本文主要介绍如何使用Pytorch中的爱因斯坦求和(einsum),掌握einsum的基本用法. einsum的安装 在安装pytorch的虚拟环境下输入以下命令: pip install opt_e ...

  6. ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route

    前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...

  7. Asp.net中GridView使用详解(引)【转】

    Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...

  8. Linux中iptraf命令详解(IP局域网监控工具)

    2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03   作者:佚名    ...

  9. ArcGIS Engine中的Symbols详解

    转自原文 ArcGIS Engine中的Symbols详解 本文由本人翻译ESRI官方帮助文档.尊重劳动成果,转载请注明来源. Symbols ArcObjects用了三种类型的Symbol(符号样式 ...

最新文章

  1. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
  2. FTP服务器如何实现安全性
  3. arm ida 伪代码 安卓 符号表_IDA调试界面介绍及快捷键
  4. xamarin textview 滚动_Apple Music有原生滚动歌词了!喜大普奔!
  5. 介绍一个非常实用的Visual Studio Code扩展 - indent-rainbow
  6. AliOS Things声源定位应用演示 1
  7. js php调用webservice,php调用web services两种方法soap和curl
  8. IEEE 解除华为限制;AWS、谷歌云大规模故障;TypeScript 3.5 发布 | 极客头条
  9. ApacheCon Asia 2021 重磅开启!流处理专题 Call for Speaker
  10. 融云联合ofo给大家送福利!
  11. 小任务:简单实现银行业务系统(附 ideal编辑器固定序列化版本方法)
  12. MySQL计算机机房管理系统,学校机房管理系统
  13. 《深入理解计算机系统》|处理器体系结构
  14. 如何快速定位 Redis 热 key
  15. 2018ei期刊目录计算机,科学网—2018年智能计算与信息系统国际会议(ICIS2018)征文期刊EI检索 - 周建国的博文...
  16. 1.4 无穷小与无穷大
  17. 【电脑运用及修理】Internet Explorer 浏览器
  18. 多进程concurrent.futures的ProcessPoolExecutor的一个注意点
  19. 知乎如何通过关键字搜索文章
  20. c语言计算机二级考试内容,2018年全国计算机二级C语言考试考什么内容

热门文章

  1. 常微分方程 $5 微分方程稳定性
  2. [转载] 硬汉2奉陪到底
  3. 学业水平考试b能上985吗_哪些大学对会考等级有要求
  4. 为什么说学习编程有助于提升专注力?
  5. 不可忽视的 C 语言陷阱!
  6. 您可能不需要Twitter客户端,只需在New Twitter中学习热键
  7. LeetCode60. 第k个排列
  8. 找不到wpcap.dll解决方法
  9. uniapp开发APP实现导航栏顶部搜索功能
  10. java疯狂讲义第四版第五章答案_疯狂java讲义第五章笔记