python - 日志中遇到的值无效

时间:2016-05-28 07:14:59

标签: python numpy math cross-entropy

我有以下表达式: 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

2 个答案:

答案 0 :(得分:9)

你可能在日志中仍然有负值,这给出了实数的纳米值。

ay应该代表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