Torch 中的 setNumInputDims 应该做啥?

Posted

技术标签:

【中文标题】Torch 中的 setNumInputDims 应该做啥?【英文标题】:What is setNumInputDims in Torch supposed to be doing?Torch 中的 setNumInputDims 应该做什么? 【发布时间】:2017-08-05 08:28:53 【问题描述】:
 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】:

顾名思义,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。

【讨论】:

以上是关于Torch 中的 setNumInputDims 应该做啥?的主要内容,如果未能解决你的问题,请参考以下文章

torch中的回归

PyTorch 中的 Torch 脚本是啥?

torch中的copy()和clone()

PyTorch中的torch.Tensor.permute()和torch.Tensor.transpose()的区别

Torch 中的 view() 和 unsqueeze() 有啥区别?

Keras 的功能类似于 Torch 中的视图