次の式があります: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
を追加しました。 y
&a
は数の多い配列で、numpy
はnp
としてインポートされます。
おそらく、ログ内に負の値が残っているため、ナンは実数になります。
a
とy
は、0から1の間の確率を表す必要があるので、なぜそこに小さい/大きい値があるのかを確認する必要があります。 1e-7を追加すると、np.log(0)
が-inf
、あなたが望む値だと思います。
エラーを発生させる可能性がある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