Tensorflow 导致日志消息加倍
Tensorflow causes logging messages to double
所以我在玩他们昨天发布的 Google 的 Tensorflow 库时遇到了一个烦人的错误,一直困扰着我。
我所做的是像往常一样设置 python 日志记录功能,结果是,如果我导入 tensorflow 库,控制台中的所有消息都开始加倍。有趣的是,如果您只使用 logging.warn/info/..()
函数,不会 发生这种情况。
不将消息加倍的代码示例:
import tensorflow as tf
import logging
logging.warn('test')
将所有消息加倍的代码示例:
import tensorflow as tf
import logging
logger = logging.getLogger('TEST')
ch = logging.StreamHandler()
logger.addHandler(ch)
logger.warn('test')
现在,我是一个简单的人。我喜欢 logging
的功能,所以我使用它。使用 logger
对象和添加 StreamHandler
的设置是我在查看其他人如何执行此操作时发现的,但它看起来符合该对象的使用方式。但是,我对日志库没有深入的了解,因为它总是有点用。
因此,任何解释为什么会出现消息加倍的帮助都是最有帮助的。
我正在使用 Ubuntu 14.04.3 LTS 和 Python 2.7.6,但是我尝试过的所有 Python 2.7 版本都会出现错误。
我得到这个输出:
test
WARNING:TEST:test
Tensorflow 也 使用日志框架并设置了自己的处理程序,因此当您记录时,默认情况下,它会传播到 tensorflow 内的父日志处理程序。您可以通过设置更改此行为:
logger.propagate = False
另见 duplicate output in simple python logging configuration
跟进:这是 tensorflow 使用日志包的方式的意外副作用。我已经在 HEAD 处对其进行了更改,以将其内部记录器的范围限定在名称 "tensorflow" 下,以避免这种污染。应该在一天左右的时间内出现在 github 头部。在此期间,logger.propagate 解决方案将起作用,并且一旦修复完成就不会中断,因此您应该可以放心使用了。再次感谢您发现这一点!
跟进-跟进:
以 TensorFlow 1.14 开头直接公开 logger
:
import tensorflow as tf
logger = tf.get_logger()
logger.propagate = False
解决了我的问题。我认为这是 tensorflow
的一个错误
所以我在玩他们昨天发布的 Google 的 Tensorflow 库时遇到了一个烦人的错误,一直困扰着我。
我所做的是像往常一样设置 python 日志记录功能,结果是,如果我导入 tensorflow 库,控制台中的所有消息都开始加倍。有趣的是,如果您只使用 logging.warn/info/..()
函数,不会 发生这种情况。
不将消息加倍的代码示例:
import tensorflow as tf
import logging
logging.warn('test')
将所有消息加倍的代码示例:
import tensorflow as tf
import logging
logger = logging.getLogger('TEST')
ch = logging.StreamHandler()
logger.addHandler(ch)
logger.warn('test')
现在,我是一个简单的人。我喜欢 logging
的功能,所以我使用它。使用 logger
对象和添加 StreamHandler
的设置是我在查看其他人如何执行此操作时发现的,但它看起来符合该对象的使用方式。但是,我对日志库没有深入的了解,因为它总是有点用。
因此,任何解释为什么会出现消息加倍的帮助都是最有帮助的。
我正在使用 Ubuntu 14.04.3 LTS 和 Python 2.7.6,但是我尝试过的所有 Python 2.7 版本都会出现错误。
我得到这个输出:
test
WARNING:TEST:test
Tensorflow 也 使用日志框架并设置了自己的处理程序,因此当您记录时,默认情况下,它会传播到 tensorflow 内的父日志处理程序。您可以通过设置更改此行为:
logger.propagate = False
另见 duplicate output in simple python logging configuration
跟进:这是 tensorflow 使用日志包的方式的意外副作用。我已经在 HEAD 处对其进行了更改,以将其内部记录器的范围限定在名称 "tensorflow" 下,以避免这种污染。应该在一天左右的时间内出现在 github 头部。在此期间,logger.propagate 解决方案将起作用,并且一旦修复完成就不会中断,因此您应该可以放心使用了。再次感谢您发现这一点!
跟进-跟进:
以 TensorFlow 1.14 开头直接公开 logger
:
import tensorflow as tf
logger = tf.get_logger()
logger.propagate = False
解决了我的问题。我认为这是 tensorflow