Computer vision Pytorch张量维数乘法
我正在尝试实现grad camm算法: 我的论点是: 激活:带形状的张量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实
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]]]])