如何重塑形状(3,1,2)到(1,2,3)的3D张量

时间:2018-06-05 22:56:24

标签: python deep-learning pytorch tensor

我打算

 data()
    {
        return {   //Took the bracket here
            blogposts: [],
            blogpost:
            {
                id: '',
                author: '',
                title: '',
                body: ''
            },

但我真正想要的是

(Pdb) aa = torch.tensor([[[1,2]], [[3,4]], [[5,6]]])
(Pdb) aa.shape
torch.Size([3, 1, 2])
(Pdb) aa
tensor([[[ 1,  2]],

        [[ 3,  4]],

        [[ 5,  6]]])
(Pdb) aa.view(1, 2, 3)
tensor([[[ 1,  2,  3],
         [ 4,  5,  6]]])

如何?

在我的应用程序中,我试图将形状(L,N,C_in)的输入数据转换为(N,C_in,L)以使用Conv1d,其中

  • L:序列长度
  • N:批量大小
  • C_in:输入中的通道数,我也将其理解为序列中每个位置的输入维数。

我也想知道Conv1d的输入与GRU的输入形状不同?

2 个答案:

答案 0 :(得分:1)

您可以将轴置换为所需的形状。 (这在某种意义上类似于np.rollaxis操作)。

In [90]: aa
Out[90]: 
tensor([[[ 1,  2]],

        [[ 3,  4]],

        [[ 5,  6]]])

In [91]: aa.shape
Out[91]: torch.Size([3, 1, 2])

# pass the desired ordering of the axes as argument
# assign the result back to some tensor since permute returns a "view"
In [97]: permuted = aa.permute(1, 2, 0)

In [98]: permuted.shape
Out[98]: torch.Size([1, 2, 3])

In [99]: permuted
Out[99]: 
tensor([[[ 1,  3,  5],
         [ 2,  4,  6]]])

答案 1 :(得分:0)

这是一种方法,仍然希望通过单一操作看到解决方案。

(Pdb) torch.transpose(aa, 0, 2).t()
tensor([[[ 1,  3,  5],
         [ 2,  4,  6]]])
(Pdb) torch.transpose(aa, 0, 2).t().shape
torch.Size([1, 2, 3])