【问题标题】:python - invalid value encountered in logpython - 日志中遇到无效值
【发布时间】: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

【问题讨论】:

    标签: python numpy math cross-entropy


    【解决方案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 的情况下并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2021-09-18
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多