【问题标题】:Multiply 2D tensor with 3D tensor in pytorch在pytorch中将2D张量与3D张量相乘
【发布时间】:2021-09-02 15:30:38
【问题描述】:

假设我有一个矩阵,例如 P = [[0,1],[1,0]] 和一个向量 v = [a,b]。如果我将它们相乘,我有:

Pv = [b,a]

矩阵P只是一个置换矩阵,它改变了每个元素的顺序。

现在假设我有相同的 P,但我有矩阵 M1 = [[1,2],[3,4]] 和 M2=[[5,6],[7,8]]。现在让我将它们组合为具有尺寸 (2,2,2) 的 3D 张量 T= [[[1,2],[3,4]], [[5,6],[7,8]]] - (C,W,H)。假设我将 P 乘以 T,这样:

PT = [[[5,6],[7,8]], [[1,2],[3,4]]]

请注意,现在 M1 现在等于 [[5,6],[7,8]] 并且 M2 等于 [[1,2],[3,4]],因为这些值已在 T 中的 C 维度上进行了置换(C,W,H)。

如何使用 matmul 在 pytorch 中乘以 PT(P=2D 张量,T=3D 张量)?以下方法不起作用:

torch.matmul(P, T)

【问题讨论】:

    标签: pytorch matrix-multiplication


    【解决方案1】:

    @mlucyanswer 的替代解决方案是使用torch.einsum。这样做的好处是可以自己定义操作,而不用担心torch.matmul 的要求:

    >>> torch.einsum('ij,jkl->ikl', P, T)
    tensor([[[5, 6],
             [7, 8]],
    
            [[1, 2],
             [3, 4]]])
    

    或者torch.matmul:

    >>> (P @ T.flatten(1)).reshape_as(T)
    tensor([[[5, 6],
             [7, 8]],
    
            [[1, 2],
             [3, 4]]])
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      torch.matmul(P, X.flatten(1)).reshape(X.shape)
      

      【讨论】:

        猜你喜欢
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-24
        • 1970-01-01
        • 2021-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多