沿维度的点积

时间:2021-03-16 21:16:57

标签: python pytorch

我有两个形状为 [B, 3 , 240, 320] 的张量,其中 B 表示批量大小,3 表示通道,240 表示高度(H),320 表示宽度(W)。

我需要找到沿通道维度(3 个通道)的点积,因此生成的张量的形状为 [B, 1 , 240, 320]。 我的张量在 gpu 中有 float32 元素(cuda 到 backprop)。

你们能建议我怎么做吗?

谢谢!

更多说明:

假设我们有 B=10、H=100、W=200。 因此,从上面可以看出,第一张量和第二张量都是常见的。如果我们保持 B、H、W 不变,我们会得到一个一维向量作为合成张量(有 3 个元素)。我需要取这两个向量的点积。因此合成张量的维数为 [B, 1, 240, 320]

1 个答案:

答案 0 :(得分:1)

点积是两个向量中值相乘的总和:

所以我猜你想把沿通道维度的所有值相乘,需要找到结果的总和,如果我的理解有误,请纠正我。

import torch

t1 = torch.rand(10, 3, 240, 320)
t2 = torch.rand(10, 3, 240, 320)

# Multiply two tensors and sum along the channel dimension
multp  = t1 * t2 
summed = multp.sum(dim = 1, keepdim = True)

print(summed.shape)  # torch.Size([10, 1, 240, 320])