web-dev-qa-db-fra.com

Quelle est la différence entre view () et unsqueeze () dans Torch?

Utilisation de nsqueeze () :

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

Utilisation de 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])

Selon la documentation, nsqueeze () insère le singleton dim à la position donnée comme paramètre et view () crée une vue avec différentes dimensions du stockage associées à tensor .

Ce que fait view () est clair pour moi mais je ne peux pas le distinguer de nsqueeze () . De plus, je ne comprends pas quand utiliser view () et quand utiliser nsqueeze () ?

Toute aide avec une bonne explication serait appréciée!

18
Wasi Ahmad

view () ne peut accepter qu'un seul argument "-1".

Donc, si vous souhaitez ajouter une dimension singleton, vous devez fournir toutes les dimensions en tant qu'arguments. Par exemple, si A est un tenseur 2x3x4, pour ajouter une dimension singleton, vous devez faire A: view (2, 1, 3, 4).

Cependant, parfois, la dimensionnalité de l'entrée est inconnue lorsque l'opération est utilisée. Ainsi, nous ne savons pas que A est 2x3x4, mais nous aimerions quand même insérer une dimension singleton. Cela se produit souvent lors de l'utilisation de minibatches de tenseurs, où la dernière dimension est généralement inconnue. Dans ces cas, le nn.Unsqueeze est utile et nous permet d'insérer la dimension sans être explicitement au courant des autres dimensions lors de l'écriture du code.

18
greenberet123