什么是Torch中的setNumInputDims应该做什么?

时间:2017-03-14 20:04:59

标签: torch

 minibatch = torch.Tensor(5, 2, 3,5)
 m = nn.View(-1):setNumInputDims(1)

 m:forward(minibatch)

给出一个大小的张量

 30x5

 m = nn.View(-1):setNumInputDims(3)
 m:forward(minibatch)

给出一个大小的张量

 5 x 30

 m = nn.View(-1):setNumInputDims(2)
 m:forward(minibatch)

给出一个大小的张量

 10 x 15

发生了什么事?我不明白为什么我会得到我的尺寸。 我不喜欢的原因是什么?我想我明白,我认为View m期待n dims作为输入。因此,如果n = 1,那么我们将5作为第一个暗淡,将30作为第二个暗淡,这是当numInputDims设置为2时似乎正在发生的事情。

1 个答案:

答案 0 :(得分:2)

正如其名称所示,View(-1):setNumInputDims(n)是设置View(-1)的输入维数。

要了解View(-1)的作用,请参阅How view() method works for tensor in torch

  

如果有任何情况您不知道您想要多少行,但确定列的数量,那么您可以将其提到-1(您可以将其扩展为尺寸更大的张量。轴值中只有一个可以是-1)。这是告诉图书馆的一种方式;给我一个包含这么多列的张量,并计算实现这一点所需的适当行数。

因此View(-1)将输入转换为二维矩阵。注意View(-1)对应于此矩阵的列。因此,其输入维度是完整输入的后半部分。它的维数意味着分配了多少维度"对于列,以及这些维度用于行之前的任何维度。

因此在你的例子中:

minibatch = torch.Tensor(5, 2, 3,5)
m = nn.View(-1):setNumInputDims(2)

它将最后两个维度(3 * 5)分配给列,将前两个维度(5 * 2)分配给行。结果张量为10 * 15.