我是靠谱客的博主 现实狗,最近开发中收集的这篇文章主要介绍torch.einsum[爱因斯坦求和]//未完待续,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

入门

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

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

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

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

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


进阶

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

import torch
from torch import einsum


a_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 = 230

tensor([[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[爱因斯坦求和]//未完待续的全部内容,希望文章能够帮你解决torch.einsum[爱因斯坦求和]//未完待续所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部