python - 日志中遇到无效值

Posted

技术标签:

【中文标题】python - 日志中遇到无效值【英文标题】:python - invalid value encountered in log 【发布时间】:2016-09-26 13:12:13 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

ay 应该代表 0 到 1 之间的概率,因此您需要检查为什么那里有更小/更大的值。添加 1e-7 表示有问题,因为np.log(0) 给出了-inf,我认为这是您想要的值。

【讨论】:

我认为添加 1e-7 将防止除以 0 错误?【参考方案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

【讨论】:

一个小评论:math.log() 将一个实数作为输入,而numpy.log() 可以将一个实数列表作为输入。当然,这种差异在 OP 的情况下并不重要。

以上是关于python - 日志中遇到无效值的主要内容,如果未能解决你的问题,请参考以下文章

转 Python的:WinReg项模块:Windows 7中:无无效HKEY错误

GraphQL 参数的值无效。预期类型'Int

【Python】logging.basicConfig无效说

-[UIPickerView setFrame:]:无效的高度值 200.0 固定到 180.0

“添加日期”的默认值无效

Redux - 错误:mergeProps 的类型对象的值无效