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)
的 Tensordot
命令
由于要计算沿 N 的点积,即 x1
的第 1 维和 x2
张量的第 1 维,您需要沿两个张量的第一个轴执行收缩通过在 Tensordot 中提供 ([1], [1])
到 dims
arg。这意味着 Torch 将分别在指定的 x1 轴 1
和指定的 x2 轴 1
上对 x1
和 x2
元素的乘积求和。提供给 dims
的参数非常混乱,这里有一个有用的线程可以帮助理解如何使用 Tensordot
here
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)
我正在想办法进行以下广播:
我有两个张量,大小分别为 (n1,N) 和 (n2,N)
我想要做的是将第一个张量的每一行与第二个张量的每一行相乘,然后对相乘后的每一行结果求和,这样我的最终张量应该是 (n1 ,n2).
我试过这个:
x1*torch.reshape(x2,(x2.size(dim=0),x2.size(dim=1),1))
但显然这行不通..不知道该怎么做
你所描述的似乎与在第一个张量和第二个张量的转置之间执行矩阵乘法实际上是一样的。可以这样做:
torch.matmul(x1, x2.T)
Tensordot
命令
由于要计算沿 N 的点积,即 x1
的第 1 维和 x2
张量的第 1 维,您需要沿两个张量的第一个轴执行收缩通过在 Tensordot 中提供 ([1], [1])
到 dims
arg。这意味着 Torch 将分别在指定的 x1 轴 1
和指定的 x2 轴 1
上对 x1
和 x2
元素的乘积求和。提供给 dims
的参数非常混乱,这里有一个有用的线程可以帮助理解如何使用 Tensordot
here
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)