Estouro Softmax [fechado]

10

Esperando o próximo curso de Andrew Ng no Coursera, estou tentando programar no Python um classificador com a função softmax na última camada para ter as diferentes probabilidades. No entanto, quando tento usá-lo no conjunto de dados CIFAR-10 (entrada: (3072, 10000)), encontro um estouro quando ele calcula os exponenciais. Na verdade, tenho números como 5000, 10000 ou 25000.

Eu já tentei duas coisas:

  • subtrair uma constante para a matriz antes de calcular o exponencial, mas tenho uma grande diferença entre os números, portanto, não posso fazer isso.
  • calcular o exponencial do log da matriz, mas ainda transbordando.

Alguém pode me ajudar a evitar esse problema?

Obrigado

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

Dlmss
fonte
Milhares tocaram no conjunto de dados e NNs do CIFAR10. Você pode ter estragado o seu código. Você pode mostrar isso?
Tagoma # 24/17
Sim, atualizei minha postagem e postei um repositório no github. No entanto, meu código não é comentado: /
Dlmss

Respostas:

16

Observe que para qualquer constante .

exijexj=ememexijexj=eximjexjm
m

Obviamente, não é verdade que , mas as versões normalizadas são as mesmas. Seu problema é que os s são muito grandes, portanto subtraia o mesmo número de todos eles antes de usar o softmax. Às vezes, as pessoas definem como o máximo de todos os s.exi=eximximmxi

Taylor
fonte