web-dev-qa-db-fra.com

Que fait "débloquer" dans Pytorch?

Je regarde la documentation, et voici leur exemple. Je ne peux pas comprendre comment cet exemple correspond à leur explication: "Renvoie un nouveau tenseur avec une dimension de taille un inséré à la position spécifiée."

>>> x = torch.tensor([1, 2, 3, 4])
>>> torch.unsqueeze(x, 0)
tensor([[ 1,  2,  3,  4]])
>>> torch.unsqueeze(x, 1)
tensor([[ 1],
        [ 2],
        [ 3],
        [ 4]])
19
user6549804

Si vous regardez la forme du tableau avant et après, vous voyez qu'avant c'était (4,) Et après qu'il était (1, 4) (Lorsque le deuxième paramètre est 0) Et (4, 1) (Lorsque le deuxième paramètre est 1). Un 1 A donc été inséré sous la forme du tableau sur l'axe 0 Ou 1, Selon la valeur du deuxième paramètre.

C'est l'opposé de np.squeeze() (nomenclature empruntée à MATLAB) qui supprime les axes de taille 1 (Singletons).

20
norok2

Je ne sais pas pourquoi les références PyTorch ne sont pas mentionnées ici car il s'agit de l'héritage PyTorch.

torch.squeezeenter image description here

torch.unsqueezeenter image description here

9
prosti

Il indique la position sur laquelle ajouter la dimension. torch.unsqueeze ajoute une dimension supplémentaire au tenseur. Supposons donc que vous ayez un tenseur de forme (3), si vous ajoutez une dimension à la position 0, elle sera de forme (1,3), ce qui signifie 1 ligne et 3 colonnes. Si vous ajoutez à la position 1, ce sera (3,1), ce qui signifie 3 lignes et 1 colonne. Si vous avez un tenseur 2D de forme (2,2) ajoutez ajoutez une dimension supplémentaire à la position 0, cela résultera du tenseur ayant une forme de (1,2,2), ce qui signifie un canal, 2 rangées et 2 Colonnes. Si vous ajoutez à la position 1, il sera de forme (2,1,2), il aura donc 2 canaux, 1 ligne et 2 colonnes. Si vous l'ajoutez à la position 2, le tenseur sera de forme (2,2,1), ce qui signifie 2 canaux, 2 lignes et une colonne.

5
blueboy21