Softmax desbordamiento [cerrado]

11

Esperando el próximo curso de Andrew Ng en Coursera, estoy tratando de programar en Python un clasificador con la función softmax en la última capa para tener las diferentes probabilidades. Sin embargo, cuando trato de usarlo en el conjunto de datos CIFAR-10 (entrada: (3072, 10000)), encuentro un desbordamiento cuando calcula los exponenciales. De hecho, tengo números como 5000, 10000 o 25000.

Ya he probado dos cosas:

  • resta una constante a la matriz antes de calcular el exponencial, pero tengo una gran diferencia entre los números, así que no puedo hacer eso.
  • calcule el exponencial del registro de la matriz pero aún se desborda.

¿Alguien puede ayudarme a evitar este problema?

Gracias

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

Dlmss
fuente
Miles han jugado en todo el conjunto de datos CIFAR10 y NNs. Es posible que haya estropeado su código. ¿Puedes mostrarlo?
tagoma
Sí, actualicé mi publicación y publiqué un repositorio de github. Sin embargo, mi código no está comentado: /
Dlmss

Respuestas:

17

Observe que para cualquier constante .

miXyojmiXj=mi-metromi-metromiXyojmiXj=miXyo-metrojmiXj-metro
metro

Obviamente no es cierto que , pero las versiones normalizadas son las mismas. Su problema es que las s son demasiado grandes, así que reste el mismo número de todas ellas antes de tomar el softmax. A veces las personas establecen que es el máximo de todas las s.miXyo=miXyo-metroXyometrometroXyo

Taylor
fuente