火炬中的3D张量* 2D张量点

时间:2016-03-16 10:15:22

标签: torch

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

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

2 个答案:

答案 0 :(得分:2)

正如@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]

答案 1 :(得分:1)

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