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时似乎正在发生的事情。
答案 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.