我有两个形状为 [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]
答案 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])