2017-03-17 300 views
1

使用unsqueeze()Torch中的view()和unsqueeze()有什么区别?

使用 view()
input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3 
print(input.unsqueeze(0).size()) # prints - torch.size([1, 2, 4, 3]) 

input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3 
print(input.view(1, -1, -1, -1).size()) # prints - torch.size([1, 2, 4, 3]) 

据文档,unsqueeze()插入单暗淡在给定的参数和view()位置创建具有相关联的存储的不同的尺寸的图tensor

view()对我来说很清楚,但我无法区分它与unsqueeze()。此外,我不明白何时使用view()以及何时使用unsqueeze()

任何帮助与良好的解释将不胜感激!

回答

2

view()只能取单个“-1”参数。

所以,如果你想添加一个singleton维度,你需要提供所有的维度作为参数。例如,如果A是一个2x3x4张量,要添加一个单独维度,您需要执行A:view(2,1,3,4)。

但是,有时候,使用操作时,输入的维度是未知的。因此,我们不知道A是2x3x4,但我们仍然希望插入一个单独的维度。当使用最小维度通常是未知的张量minibatches时,会发生这种情况。在这些情况下,nn.Unsqueeze非常有用,可以让我们在编写代码时插入维度,而不必明确知道其他维度。