pytorch 变量索引丢失一维

pytorch variable index lost one dimension

我打算获取变量中的每个水平张量,但我丢失了一个维度。

这是我的代码:

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]?

尝试torch.unsqueeze(x[i, j], 0)

在你的例子中,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 的维度。

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

x[:, j][:, None]

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

x[:, j, None]