Torch中view()和unqueeze()有什么区别?

Was*_*mad 18 torch

使用unsqueeze():

input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3
print(input.unsqueeze(0).size()) # prints - torch.size([1, 2, 4, 3])
Run Code Online (Sandbox Code Playgroud)

使用view():

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])
Run Code Online (Sandbox Code Playgroud)

根据文档,unqueeze()在作为参数给出的位置处插入singleton dim,而view()创建一个具有与之关联的存储的不同维度的视图tensor.

什么视图()的作用是明确的给我,但我无法从区别unsqueeze() .而且,我不知道何时使用view()以及何时使用unsqueeze()

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

gre*_*123 18

view()只能接受一个"-1"参数.

因此,如果要添加单个维度,则需要提供所有维度作为参数.例如,如果A是2x3x4张量,要添加单个维度,则需要执行A:view(2,1,3,4).

但是,有时,在使用操作时,输入的维度是未知的.因此,我们不知道A是2x3x4,但我们仍然希望插入单个维度.当使用张量的张量时,这种情况会发生很多,其中最后一个维度通常是未知的.在这些情况下,nn.Unsqueeze非常有用,我们可以在编写代码时插入维度而无需显式地了解其他维度.

  • 使用 unsqueeze() 和 view() 插入单例维度时,性能方面是否有任何差异? (6认同)
  • 为什么不简单地执行 ```A.view(A.shape[0], 1, A.shape[1], A.shape[2])``` ? (2认同)
  • @Ritwik,因为那很麻烦。“unsqueeze”是专门为该操作设计的简写形式。 (2认同)