python - 日志中遇到无效值
python - 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)))
它给我以下警告:
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
。
你可能在日志中仍然有负值,它给出了实数的 nan。
a
和 y
应该代表 0 到 1 之间的概率,因此您需要检查为什么那里有 smaller/larger 值。添加 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
我有以下表达:
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
。
你可能在日志中仍然有负值,它给出了实数的 nan。
a
和 y
应该代表 0 到 1 之间的概率,因此您需要检查为什么那里有 smaller/larger 值。添加 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