web-dev-qa-db-ja.com

python-ログで無効な値が見つかりました

次の式があります:log = np.sum(np.nan_to_num(-y*np.log(a+ 1e-7)-(1-y)*np.log(1-a+ 1e-7)))

それは私に次の警告を与えています:

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)))

無効な値が何であるか、またはなぜそれを取得するのか理解できません。どんな助けもありがたいです。

[〜#〜] note [〜#〜]:これはクロスエントロピーコスト関数であり、ログ内にゼロが含まれないように1e-7を追加しました。 yaは数の多い配列で、numpynpとしてインポートされます。

12
helix

おそらく、ログ内に負の値が残っているため、ナンは実数になります。

ayは、0から1の間の確率を表す必要があるので、なぜそこに小さい/大きい値があるのか​​を確認する必要があります。 1e-7を追加すると、np.log(0)-inf、あなたが望む値だと思います。

11
Elad Joseph

エラーを発生させる可能性があるmath.log()の代わりにnumpy.log()を使用できます

>>> 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