torch.cat 沿负维度

torch.cat along negative dimension

在下面,

 x_6 = torch.cat((x_1, x_2_1, x_3_1, x_5_1), dim=-3)
 Sizes of tensors x_1, x_2_1, x_3_1, x_5_1 are
 torch.Size([1, 256, 7, 7])
 torch.Size([1, 256, 7, 7]) 
 torch.Size([1, 256, 7, 7])
 torch.Size([1, 256, 7, 7]) respectively.
        
 The size of x_6 turns out to be torch.Size([1, 1024, 7, 7])

我无法理解和想象这种沿负维度(在本例中为 -3)的串联。 这里到底发生了什么? 如果 dim = 3,情况如何? 对于一组给定的张量,是否对 dim 有任何限制?

Python 提供负索引,因此您可以访问从列表末尾开始的元素,例如,-1 是列表的最后一个元素。 在这种情况下,张量有 4 个维度,所以 -3 实际上是第二个元素。

不完全正确,实际上错误从张量代数的角度来看,因为答案表明问题与访问或索引一个 Python 列表。不是。

-3 意味着我们沿着 2nd 维度连接张量。 (你可以很好地使用 1 而不是令人困惑的 -3)。


仔细观察张量形状,它们似乎代表(b, c, h, w),其中b代表batch_size,c代表通道数, h代表高度,w代表宽度。

通常是这种情况,在深度神经网络中编码(可能)图像的最后阶段的某个地方,我们得到这些特征图。

带有dim=-3torch.cat()操作意味着我们沿着通道c的维度连接这4个张量(见上文)。

4 * 256 => 1024

因此,所得张量的形状为 torch.Size([1, 1024, 7, 7])


注释:很难想象 4 维 space,因为我们人类生活在一个固有的 3D 世界中。不过,这里有一些我之前写的答案,这将有助于获得一些心理画面。