我将在变量中获得每个水平张量但我丢失了一个维度。
这是我的代码:
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] ???如果我不能理解我的问题,请写下来,不要只是对这个问题投反对票。这不礼貌。非常感谢!
答案 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]