在pytorch中广播元素明智的乘法
Broadcasting element wise multiplication in pytorch
我在 pytorch 中有一个大小为 torch.Size([1443747, 128])
的张量。我们将其命名为张量 A
。在这个张量中,128 代表批量大小。我有另一个大小为 torch.Size([1443747])
的一维张量。我们称它为 B
。我想对 B 和 A 进行元素级乘法,这样 B 就乘以张量 A
的所有 128 列(显然是以元素级的方式)。换句话说,我想沿着 dimension=1
广播元素明智的乘法。
我怎样才能在 pytorch 中实现这一点?
如果我没有涉及张量 A (batch size = 1
) 的批量大小,那么正常的 *
运算符会很容易地进行乘法运算。 A*B
然后会生成大小为 torch.Size([1443747])
的合成张量。但是,我不明白为什么 pytorch 不沿维度 1 广播张量乘法?有什么办法吗?
我想要的是,B
应该以元素明智的方式与 A
的所有 128 列相乘。因此,生成的张量大小为 torch.Size([1443747, 128])
.
尺寸应该匹配,如果你转置 A 或取消挤压 B,它应该可以工作:
C = A.transpose(1,0) * B # shape: [128, 1443747]
或
C = A * B.unsqueeze(dim=1) # shape: [1443747, 128]
注意两个解的形状不同
我在 pytorch 中有一个大小为 torch.Size([1443747, 128])
的张量。我们将其命名为张量 A
。在这个张量中,128 代表批量大小。我有另一个大小为 torch.Size([1443747])
的一维张量。我们称它为 B
。我想对 B 和 A 进行元素级乘法,这样 B 就乘以张量 A
的所有 128 列(显然是以元素级的方式)。换句话说,我想沿着 dimension=1
广播元素明智的乘法。
我怎样才能在 pytorch 中实现这一点?
如果我没有涉及张量 A (batch size = 1
) 的批量大小,那么正常的 *
运算符会很容易地进行乘法运算。 A*B
然后会生成大小为 torch.Size([1443747])
的合成张量。但是,我不明白为什么 pytorch 不沿维度 1 广播张量乘法?有什么办法吗?
我想要的是,B
应该以元素明智的方式与 A
的所有 128 列相乘。因此,生成的张量大小为 torch.Size([1443747, 128])
.
尺寸应该匹配,如果你转置 A 或取消挤压 B,它应该可以工作:
C = A.transpose(1,0) * B # shape: [128, 1443747]
或
C = A * B.unsqueeze(dim=1) # shape: [1443747, 128]
注意两个解的形状不同