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 提供了实数。
a
和 y
应该代表 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错误
【Python】logging.basicConfig无效说