【问题标题】:torch.cat along negative dimensiontorch.cat 沿负维度
【发布时间】:2021-02-02 09:30:19
【问题描述】:

接下来,

 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 pytorch numpy-ndarray tensor torchvision


    【解决方案1】:

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

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


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

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

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

    4 * 256 => 1024

    因此,生成的张量以torch.Size([1, 1024, 7, 7]) 的形状结束。


    注意事项:由于我们人类生活在一个固有的 3D 世界中,因此很难将 4 维空间可视化。不过,这里有一些我不久前写的答案,这将有助于了解一些心理情况。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-01-03
        • 2021-06-14
        • 1970-01-01
        • 2018-05-31
        • 2016-07-12
        • 1970-01-01
        • 2019-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多