Débordement Softmax [fermé]

11

En attendant le prochain cours d'Andrew Ng sur Coursera, j'essaie de programmer sur Python un classifieur avec la fonction softmax sur la dernière couche pour avoir les différentes probabilités. Cependant, lorsque j'essaie de l'utiliser sur l'ensemble de données CIFAR-10 (entrée: (3072, 10000)), je rencontre un débordement lorsqu'il calcule les exponentielles. En effet, j'ai des nombres comme 5000, 10000 ou 25000.

J'ai déjà essayé deux choses:

  • soustraire une constante à la matrice avant de calculer l'exponentielle mais j'ai une grande différence entre les nombres donc je ne peux pas faire ça.
  • calculer l'exponentielle du log de la matrice mais elle déborde toujours.

Quelqu'un peut-il m'aider à éviter ce problème?

Je vous remercie

MODIFIER: https://github.com/Kentena/softmax/

Dlmss
la source
Des milliers de personnes ont joué contre le jeu de données CIFAR10 et les NN. Vous avez peut-être gâché votre code. Pouvez-vous le montrer?
tagoma
Oui, j'ai mis à jour mon message et publié un référentiel github. Cependant, mon code n'est pas commenté: /
Dlmss

Réponses:

17

Observe ceci

exijexj=ememexijexj=eximjexjm
pour toute constante m.

De toute évidence, il n'est pas vrai que exi=exim, mais les versions normalisées sont les mêmes. Votre problème est que lexis sont trop gros, donc soustrayez le même nombre mavant de prendre le softmax. Parfois, les gens se mettentm être le maximum de tous les xis.

Taylor
la source