PyTorch 张量广播

PyTorch Tensor broadcasting

我正在想办法进行以下广播:

我有两个张量,大小分别为 (n1,N) 和 (n2,N)

我想要做的是将第一个张量的每一行与第二个张量的每一行相乘,然后对相乘后的每一行结果求和,这样我的最终张量应该是 (n1 ,n2).

我试过这个:

x1*torch.reshape(x2,(x2.size(dim=0),x2.size(dim=1),1))

但显然这行不通..不知道该怎么做

你所描述的似乎与在第一个张量和第二个张量的转置之间执行矩阵乘法实际上是一样的。可以这样做:

torch.matmul(x1, x2.T)

您要查找的是来自 PyTorch and Numpy

Tensordot 命令

由于要计算沿 N 的点积,即 x1 的第 1 维和 x2 张量的第 1 维,您需要沿两个张量的第一个轴执行收缩通过在 Tensordot 中提供 ([1], [1])dims arg。这意味着 Torch 将分别在指定的 x1 轴 1 和指定的 x2 轴 1 上对 x1x2 元素的乘积求和。提供给 dims 的参数非常混乱,这里有一个有用的线程可以帮助理解如何使用 Tensordothere

x1 = torch.arange(6.).reshape(2,3) 
>>> tensor([[0., 1., 2.],
            [3., 4., 5.]])
# x1 is Tensor of shape (2,3)

x2 = torch.arange(9.).reshape(3,3)
>>> tensor([[0., 1., 2.],
            [3., 4., 5.],
            [6., 7., 8.]])
# x2 is Tensor of shape (3,3)

x = torch.tensordot(x1, x2, dims=([1],[1]))
>>> tensor([[ 5., 14., 23.],
            [14., 50., 86.]])
# x is Tensor of shape (2,3)