Pytorch softmax: Quelle est la dimension de l'utiliser?
La fonction torch.nn.functional.softmax
prend deux paramètres: input
et dim
. Selon sa documentation, la softmax opération est appliquée à toutes les tranches de input
le long de la spécifié dim
, et remettre à l'échelle de sorte que les éléments se situent dans la fourchette (0, 1)
et la somme de 1.
Laisser l'entrée:
input = torch.randn((3, 4, 5, 6))
Supposons que je veux la suite, de sorte que chaque entrée de la matrice est de 1:
sum = torch.sum(input, dim = 3) # sum's size is (3, 4, 5, 1)
Comment dois-je appliquer softmax?
softmax(input, dim = 0) # Way Number 0
softmax(input, dim = 1) # Way Number 1
softmax(input, dim = 2) # Way Number 2
softmax(input, dim = 3) # Way Number 3
Mon intuition me dit que c'est le dernier, mais je n'en suis pas sûr. L'anglais n'est pas ma première langue et de l'utilisation de la parole along
semblait confus pour moi à cause de ça.
Je ne suis pas très clair sur ce "long" signifie, donc, je vais utiliser un exemple qui pourrait clarifier les choses. Supposons que nous avons un tenseur de taille (s1, s2, s3, s4), et je veux que cela arrive
- que fait un -1 faire?
- ce n'", de sorte que chaque entrée de la matrice est 1:" veux dire? Pouvez-vous préciser ce que votre question veut?
- le long de
dim=0
signifie le suivant: considérons un tenseurt
de taille(s0,s1,s2,s3)
. Puis aller le long de la dimension0
signifie que les coordonnées nous pouvons index dans la dimension de la gamme du début à la fin de l'élément de nombre de cette dimension. Dans ce cas il faudra passer part[0,b,c,d], ... , t[i0,b,c,d] , ... , t[s0,b,c,d]
. Tout simplement en passant par toutes les valeurs de zéro à coordonner.
Vous devez vous connecter pour publier un commentaire.
La meilleure façon que je peux penser à vous faire comprendre, c'est que vous êtes donné un tenseur de forme
(s1, s2, s3, s4)
et comme vous l'avez mentionné vous voulez avoir la somme de toutes les entrées sur le dernier axe 1.Alors vous devriez appeler le softmax comme:
De comprendre facilement, vous pouvez envisager une 4d tenseur de forme
(s1, s2, s3, s4)
en 2d tenseur ou une matrice de la forme(s1*s2*s3, s4)
. Maintenant, si vous voulez la matrice contenir des valeurs de chaque ligne (axis=0) ou colonne (axis=1) d'un montant total de 1, alors, vous pouvez simplement appeler lasoftmax
fonction de la 2d tenseur comme suit:Vous pouvez voir l'exemple que Steven a mentionné dans son réponse.
Steven la réponse ci-dessus n'est pas correct. Voir le cliché ci-dessous. C'est en fait l'inverse.
Je ne suis pas 100% sûr de ce que votre question, mais je pense que votre confusion est tout simplement que vous ne comprenez pas ce
dim
paramètre signifie. Je vais donc expliquer et donner des exemples.Si nous avons:
ce que cela signifie, c'est que
m0
volonté de normaliser les éléments le long du zéro des coordonnées du tenseur qu'il reçoit. Formellement, si, étant donné un tenseurb
de la taille de dire(d0,d1)
puis les suivantes seront remplies:vous pouvez facilement vérifier cela avec un Pytorch exemple:
maintenant depuis
dim=0
signifie en passant pari0 \in {0,1}
(c'est à dire en passant par les lignes) si l'on choisit une colonnei1
et la somme de ses éléments (c'est à dire les lignes), alors nous devrions obtenir 1. Vérifier:comme prévu.
Noter que nous ne obtenir toutes les lignes de la somme de 1 par "résumant les lignes" avec
torch.sum(b0,dim=0)
, check it out:Nous pouvons créer un exemple plus compliqué pour s'assurer qu'il est vraiment clair.
de sorte que nous avons attendu si nous somme de tous les éléments le long de la première coordonnée de la première valeur à la dernière valeur que l'on obtient 1. Donc, tout est normalisé, le long de la première dimension (ou de la première coordiante
i0
).Également le long de la dimension 0 signifie que vous pouvez faire varier le coordonner le long de la dimension et de considérer chaque élément. Un peu comme avoir une boucle en passant par les valeurs de la première coordonne peut prendre comme
Prenons l'exemple de deux dimensions
vous voulez que votre résultat final à
ou
Si c'est la première option, alors vous voulez dim = 1. Si c'est la deuxième option que vous souhaitez dim = 0.
Notez que les colonnes ou zéro dimension est normalisé dans le deuxième exemple où il est normalisé le long du zéro dimension.
Mis à jour 2018-07-10: pour refléter le fait que zéro dimension fait référence à des colonnes dans pytorch.