25

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

4

2 回答 2

25

您可能在日志中仍然有负值,这给 nan 提供了实数。

a并且y应该代表0到1之间的概率,所以你需要检查为什么你有更小/更大的值。添加 1e-7 表明有一些可疑的东西,因为np.log(0)给了-inf,我认为这是你想要的值。

于 2016-05-28T07:21:29.620 回答
3

您可以使用math.log()replace 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
于 2016-06-02T01:39:47.697 回答