Computer vision Pytorch张量维数乘法

Computer vision Pytorch张量维数乘法,computer-vision,pytorch,Computer Vision,Pytorch,我正在尝试实现grad camm算法: 我的论点是: 激活:带形状的张量torch.Size([1,512,14,14]) alpha值:带形状的张量torch.Size([512]) 我想将每个激活(维度索引1(大小512))乘以每个对应的alpha值:例如,如果激活512中的第I个索引是4,第I个alpha值是5,那么我的新第I个激活将是20 输出的形状应为torch.Size([1,512,14,14])假设所需输出的形状为(1,512,14,14) 您可以通过torch.einsum实

我正在尝试实现grad camm算法:

我的论点是:

激活:带形状的张量
torch.Size([1,512,14,14])

alpha值:带形状的张量
torch.Size([512])

我想将每个激活(维度索引1(大小512))乘以每个对应的alpha值:例如,如果激活512中的第I个索引是4,第I个alpha值是5,那么我的新第I个激活将是20


输出的形状应为torch.Size([1,512,14,14])

假设所需输出的形状为
(1,512,14,14)

您可以通过
torch.einsum
实现这一点:

torch.einsum('nchw,c->nchw', x, y)
或者使用简单的点积,但首先需要在
y
上添加两个附加尺寸:

x*y[None, :, None, None]

下面是一个使用
x.shape=(1,4,2,2)
y=(4,)
的示例:


是的,但如果这是我的输入(x,y,z,w),如果我没有弄错的话,只有y维度应该乘以。不,所有通道都将乘以
y
张量的alpha值。查看结果频道3:
[[8,9],[10,11]
乘以3得到
[[24,27],[30,33]
。感谢您取消删除此帖子(您现在可以删除新帖子)。欢迎来到约翰。如果你觉得答案不适合你的问题,你不应该只是删除整个东西来创建一个完全相同的副本。对于那些花时间回答问题的人来说,这是非常粗鲁的!如果下面的答案不适合你,请编辑你的问题。我现在将尝试编辑它。非常感谢你!当从下面使用
x
y
时,您能给我显示所需的输出吗(从0到15的距离)。我们检查提取特征的每个特征图(每个通道),并将其乘以计算的alpha。特征图是索引1(大小512)中的激活张量中包含的数字,因此我从算法中了解到,我们应该将它们中的每一个都乘以相应的alpha值标量。我开始认为我搞错了,你搞错了,但你的代码甚至没有为我编译。我怎样才能让它工作?我有两个张量,如我所说,x(4维)和y(1维),输出也应该是4维。谢谢
>>> x = torch.arange(16).reshape(1, 4, 2, 2)
tensor([[[[ 0,  1],
          [ 2,  3]],

         [[ 4,  5],
          [ 6,  7]],

         [[ 8,  9],
          [10, 11]],

         [[12, 13],
          [14, 15]]]])

>>> y = torch.arange(1, 5)
tensor([1, 2, 3, 4])

>>> x*y[None, :, None, None]
tensor([[[[ 0,  1],
          [ 2,  3]],

         [[ 8, 10],
          [12, 14]],

         [[24, 27],
          [30, 33]],

         [[48, 52],
          [56, 60]]]])