web-dev-qa-db-fra.com

python - valeur non valide rencontrée dans le journal

J'ai l'expression suivante: log = np.sum(np.nan_to_num(-y*np.log(a+ 1e-7)-(1-y)*np.log(1-a+ 1e-7)))

cela me donne l'avertissement suivant:

RuntimeWarning: invalid value encountered in log
  log = np.sum(np.nan_to_num(-y*np.log(a+ 1e-7)-(1-y)*np.log(1-a+ 1e-7)))

Je ne comprends pas quelle pourrait être la valeur invalide ni pourquoi je l'obtiens. Toute aide est appréciée.

NOTE : Il s'agit d'une fonction de coût d'entropie croisée où j'ai ajouté 1e-7 pour éviter d'avoir des zéros dans le journal. y & a sont des tableaux numpy et numpy est importé sous la forme np.

12
helix

Vous avez probablement encore des valeurs négatives à l'intérieur du journal, ce qui donne nan avec des nombres réels.

a et y devraient représenter une probabilité comprise entre 0 et 1, vous devez donc vérifier pourquoi vous avez des valeurs plus petites/plus grandes. L'ajout de 1e-7 montre qu'il y a quelque chose de louche, parce que np.log(0) donne -inf, dont je pense que c'est la valeur que vous voulez.

11
Elad Joseph

Vous pouvez utiliser math.log() en remplaçant numpy.log(), ce qui pourrait générer une erreur

>>> import numpy
>>> numpy.log(0)
-inf
>>> numpy.__version__
'1.3.0'
>>> import math
>>> math.log(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
2
WANG.Zhongzhi