torch.einsum[爱因斯坦求和]//未完待续

2023-10-09 11:20

本文主要是介绍torch.einsum[爱因斯坦求和]//未完待续,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

入门

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

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

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

Pytorch中, torch.einsum详解。_电子科技大学的博客-CSDN博客_torch.einsum

矩阵乘法与高阶张量运算都有一个例子,都分析的很不错


进阶

在上面的字符串中,隐式地省略了重复的下标k,表示在该维度矩阵乘;另外输出中未指明下标i,表示在该维度累加,可以看下面代码例子进行学习。 

import torch
from torch import einsuma_tensor = torch.tensor([[11, 12, 13, 14],[21, 22, 23, 24],[31, 32, 33, 34],[41, 42, 43, 44]])
print(a_tensor)b_tensor = torch.tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3],[4, 4, 4, 4]])
print(b_tensor) 
# '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)
output_x = torch.einsum('ik, kj -> j', a_tensor, b_tensor)
output_y = torch.einsum('ik, kj -> i', a_tensor, b_tensor)
print(output)
print(output_x)
print(output_y)
#11*1+12*2+13*3+14*4 = 130
#21*1+22*2+23*3+24*4 = 230tensor([[11, 12, 13, 14],[21, 22, 23, 24],[31, 32, 33, 34],[41, 42, 43, 44]])
tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3],[4, 4, 4, 4]])
tensor([[130, 130, 130, 130],[230, 230, 230, 230],[330, 330, 330, 330],[430, 430, 430, 430]])
tensor([1120, 1120, 1120, 1120])
tensor([ 520,  920, 1320, 1720])

einsum:爱因斯坦求和约定 - 冬色 - 博客园


爱因斯坦求和~enisum~以及各种矩阵乘法product公式~最后有手绘enisum理解_小卜妞~的博客-CSDN博客 // 细节挺好爱因斯坦求和~enisum~以及各种矩阵乘法product公式~最后有手绘enisum理解_小卜妞~的博客-CSDN博客 

参考资料

einsum方法详解(爱因斯坦求和)_ashome123的博客-CSDN博客_einsum //简洁具有框架性,代码跑不通,??

一文学会 Pytorch 中的 einsum - 知乎 //细节描述

矩阵的迹(Trace)_ttliu_kiwi的博客-CSDN博客_矩阵的迹

 

这篇关于torch.einsum[爱因斯坦求和]//未完待续的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/172478

相关文章

用einsum实现MultiHeadAttention前向传播

einsum教程网站Einstein Summation in Numpy | Olexa Bilaniuk's IFT6266H16 Course Blog 编写训练模型 import tensorflow as tfclass Model(tf.keras.Model):def __init__(self, num_heads, model_dim):super().__init__

1 模拟——67. 二进制求和

1 模拟 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1:输入:a = "11", b = "1"输出:"100"示例 2:输入:a = "1010", b = "1011"输出:"10101" 算法设计 可以从低位到高位(从后向前)计算,用一个变量carry记录进位,如果有字符没处理完或者有进位,则循环处理。两个字符串对

Leetcode67---二进制求和

https://leetcode.cn/problems/add-binary/description/ 给出的两个二进制,我们可以从最后开始往前运算。 给当前短的一位前面补充0即可。 class Solution {public String addBinary(String a, String b) {//给的就是二进制字符串 最后一位开始遍历 如果没有就补充0?StringBuil

pytorch torch.nn.functional.one_hot函数介绍

torch.nn.functional.one_hot 是 PyTorch 中用于生成独热编码(one-hot encoding)张量的函数。独热编码是一种常用的编码方式,特别适用于分类任务或对离散的类别标签进行处理。该函数将整数张量的每个元素转换为一个独热向量。 函数签名 torch.nn.functional.one_hot(tensor, num_classes=-1) 参数 t

torch.nn 与 torch.nn.functional的区别?

区别 PyTorch中torch.nn与torch.nn.functional的区别是:1.继承方式不同;2.可训练参数不同;3.实现方式不同;4.调用方式不同。 1.继承方式不同 torch.nn 中的模块大多数是通过继承torch.nn.Module 类来实现的,这些模块都是Python 类,需要进行实例化才能使用。而torch.nn.functional 中的函数是直接调用的,无需

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

【hdu】敌兵布阵(线段树,更加结点,区间求和)

最近开始刷线段树,主要围绕notonlysuccess的线段树总结刷。 结点修改还是比较简单的,不需要什么懒惰标记,直接二分递归就可以了。 #include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vecto

上海市计算机学会竞赛平台2024年7月月赛丙组求和问题

题目描述 给定 nn 个整数 a1,a2,…,ana1​,a2​,…,an​,请问这个序列最长有多少长的前缀,满足元素的和大于或等于 00?如果任何长度大于 00 的前缀之和都为负数,则输出 00 输入格式 第一行:单个整数表示 nn第二行:nn 个整数表示 a1,a2,…,ana1​,a2​,…,an​ 输出格式 单个整数:表示最长的前缀长度,使得前缀的和大于等于 00 数据范围

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

C++入门(03)萌新问题多(一)(未完待续)

文章目录 1. 一闪而过使用system("pause")使用cin.get() 1. 一闪而过 .exe 在用户计算机上运行后“一闪而过”,是因为控制台程序没有专门的用户图形界面,程序执行完所有代码后默认完成任务自动关闭 使用system(“pause”) 在程序的结尾处加入 system(“pause”),程序在执行完毕后等待用户按任意键继续。这是最简单的方法。 使