在Theano中,当我有一个形状为[A,B,C]的3D张量x
和一个形状为[C,D]的2D张量y
时,theano.tensor.dot(x, y)
会返回具有形状[A,B,D]的3D张量。
Torch中的等效操作是什么? torch.dot
似乎没有这样做,x * y
和torch.mm
抱怨他们想要两个参数的2D张量,torch.bmm
想要两个参数的3D张量。< / p>
答案 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的文档。