pytorch变量索引丢失了一个维度

时间:2018-02-02 06:37:59

标签: python neural-network deep-learning reshape pytorch

我将在变量中获得每个水平张量但我丢失了一个维度。

这是我的代码:

import torch
from torch.autograd import Variable
t = torch.rand((2,2,4))
x = Variable(t)
print(x)
shape = x.size()
for i in range(shape[0]):
    for j in range(shape[1]):
        print(x[i,j])

,输出为:

Variable containing:
(0 ,.,.) =
  0.6717  0.8216  0.5100  0.9106
  0.3280  0.8182  0.5781  0.3919

(1 ,.,.) =
  0.8823  0.4237  0.6620  0.0817
  0.5781  0.4187  0.3769  0.0498
[torch.FloatTensor of size 2x2x4]

Variable containing:
 0.6717
 0.8216
 0.5100
 0.9106
[torch.FloatTensor of size 4]

Variable containing:
 0.3280
 0.8182
 0.5781
 0.3919
[torch.FloatTensor of size 4]

Variable containing:
 0.8823
 0.4237
 0.6620
 0.0817
[torch.FloatTensor of size 4]

Variable containing:
 0.5781
 0.4187
 0.3769
 0.0498
[torch.FloatTensor of size 4]

我怎样才能获得[大小为1x4的torch.FloatTensor] ???如果我不能理解我的问题,请写下来,不要只是对这个问题投反对票。这不礼貌。非常感谢!

3 个答案:

答案 0 :(得分:1)

在您的情况下,x是2x2x4张量。因此,当您执行x[0]时,您将获得第一行中的2x4张量。如果你x[i,j],你获得位置(i,j)的4维向量。如果要保留其中一个尺寸,可以使用切片:x[i,j:j+1]或重新形成张量:x[i,j].view(1,4)。因此,您的代码看起来像:

import torch
from torch.autograd import Variable
t = torch.rand((2,2,4))
x = Variable(t)
print(x)
shape = x.size()
for i in range(shape[0]):
    for j in range(shape[1]):
        print(x[i,j:j+1])

import torch
from torch.autograd import Variable
t = torch.rand((2,2,4))
x = Variable(t)
print(x)
shape = x.size()
for i in range(shape[0]):
    for j in range(shape[1]):
        print(x[i,j].view(1,4)

会给你想要的结果。

修改

是的,或者正如nnnmmm的回答中提到的那样,torch.unsqueeze(x[i, j], 0)也可以正常工作,因为它在第0个位置添加了大小为1的维度。

答案 1 :(得分:0)

答案 2 :(得分:0)

之后您可以使用 None 轻松添加所需的维度

x[:, j][:, None]

但您甚至可以首先将其包含在索引中

x[:, j, None]