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
Respostas:
Observe que para qualquer constante .
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=exi−m xi m m xi
fonte