我是靠谱客的博主 高高枫叶,最近开发中收集的这篇文章主要介绍【Pytorch】einsum爱因斯坦简记法举例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文为 Pytorch 学习笔记,讲解爱因斯坦简记法。欢迎在评论区与我讨论????

爱因斯坦简记法

是爱因斯坦提出的对向量、矩阵、张量求和运算的简记法。

被省略的部分是求和符号和求和号的下标。

省略规则:默认成对出现的下标为求和下标。

举例

  1. x i , y i x_i,y_i xi,yi 简化表示内积 < x , y > <x,y> <x,y>
    x i y i : = ∑ i x i y i = o x_iy_i:=sum_ix_iy_i=o xiyi:=ixiyi=o
    其中 o o o 为输出。

  2. X i k , Y k j X_{ik},Y_{kj} Xik,Ykj 简化表示矩阵乘法 X ⋅ Y Xcdot Y XY
    X i k Y k j : = ∑ k X i k Y k j = O i j X_{ik}Y_{kj}:=sum_kX_{ik}Y_{kj}=O_{ij} XikYkj:=kXikYkj=Oij
    其中 O i j O_{ij} Oij 为输出矩阵的第 i j ij 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]])
    
  4. 高阶张量:

    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.0
     
    print(np.sum(a[:,:,1]*b[:,:,0].T))
     
    4532.0
    

    公式为:
    A i j k B j i l : = ∑ i ∑ j A i j k B j i l = O k l A_{ijk}B_{jil}:=sum_isum_jA_{ijk}B_{jil}=O_{kl} AijkBjil:=ijAijkBjil=Okl
    O O O k , l k,l k,l 个元素为矩阵 A[:,:,k] 和矩阵 B[:,:,l] 转置,对应元素相乘再求和。

参考

有帮助的话点个赞加关注吧 ????

最后

以上就是高高枫叶为你收集整理的【Pytorch】einsum爱因斯坦简记法举例的全部内容,希望文章能够帮你解决【Pytorch】einsum爱因斯坦简记法举例所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部