【问题标题】:3D tensor * 2D tensor dot in TorchTorch 中的 3D 张量 * 2D 张量点
【发布时间】:2016-07-02 03:42:59
【问题描述】:

在 Theano 中,当我有一个形状为 [A,B,C] 的 3D 张量 x 和一个形状为 [C,D] 的 2D 张量 y 时,theano.tensor.dot(x, y) 返回一个形状为 [ A,B,D]。

Torch 中的等效操作是什么? torch.dot 似乎没有这样做,x * ytorch.mm 抱怨他们想要两个参数的 2D 张量,torch.bmm 想要两个参数的 3D 张量。

【问题讨论】:

    标签: torch


    【解决方案1】:

    正如@smhx 建议的那样,可能的解决方案是重复第二个张量(有一种方法可以在不分配内存的情况下做到这一点),然后执行批处理矩阵矩阵乘积:

    function repeatNoCopy(tensor, k)
        local tens_size = tensor:size():totable()
        return torch.expand(tensor:view(1, unpack(tens_size)), k, unpack(tens_size))
    end
    
    A = torch.rand(3, 2, 5)
    B = torch.rand(5, 4)
    B_rep = repeatNoCopy(B, 3)
    
    result = torch.bmm(A, B_rep)
    
    print(result)
    > [torch.DoubleTensor of size 3x2x4]
    

    【讨论】:

      【解决方案2】:

      您需要将 y 扩展为 [A,C,D] 的大小,然后使用 torch.bmm。查看 torch.expand 或 torch.repeatTensor 的文档。

      【讨论】:

      • 你能说得更具体点吗?代码会是什么样子?从文档看来,repeatTensor 创建了一个副本?我不想那样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 2016-10-06
      相关资源
      最近更新 更多