我有以下表达式:
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)))
我不明白什么可能是无效价值或为什么我得到它。感谢任何帮助。
注意:这是一个交叉熵成本函数,我添加1e-7
以避免在日志中包含零。 y
& a
是numpy数组,numpy
导入为np
。
答案 0 :(得分:9)
你可能在日志中仍然有负值,这给出了实数的纳米值。
a
和y
应该代表0到1之间的概率,所以你需要检查为什么你有更小/更大的值。添加1e-7表示有些东西是可疑的,因为np.log(0)
给出-inf
,我认为这是你想要的值。
答案 1 :(得分:2)
您可以使用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