Tensorflow日志消息不会出现

时间:2017-06-30 18:47:33

标签: python logging tensorflow error-logging

我使用.order(members_count: :desc)安装了tensorflow 1.2.0

当我运行包含

的样本时
pip install

表单的日志消息

import logging
tf.logging.set_verbosity(tf.logging.INFO)
即使标志为logging.info('TEST')

也不会出现在终端输出中

根据this answer,我也试过了

--tostderr

但问题仍然存在。有什么想法吗?

4 个答案:

答案 0 :(得分:8)

TF Logging Basics:

因此,在tensorflow日志记录方面存在很多混淆,实际上并没有很好地记录。我在搜索中几次登陆这里,所以它似乎是一个发布答案的好地方。

经过Ubuntu和Windows的一些研究和实验(超过我的计划),这就是我得到的:

有两个标记,类似命名,但语义有些不同:

  • TF_CPP_MIN_LOG_LEVEL - 有3或4个基本级别 - 低数字=更多消息
    • 0输出信息,警告,错误和致命(默认
    • 1输出警告,以及
    • 2输出错误及以上。
    • 等......我没有检查边缘情况
  • TF_CPP_MIN_VLOG_LEVEL - 这会导致非常多的信息错误 - 实际上仅用于调试 - 低数字=减少消息
    • 3输出大量的东西
    • 2输出更少
    • 1输出更少
    • 0不输出任何额外内容(默认

附加说明:

  • 由于所有VLOG消息都是信息性的,因此需要将LOG设置为0才能看到它们。幸运的是,这是默认设置。
  • 这些错误会转到标准错误,因此您可以使用以下内容重定向它们:
    • python tf-program.py &>mylog.log
  • 这些应该由os模块选取,以便您能够在环境中设置它们
  • 如果没有VLOG且没有GPU,那么就没有那么多的信息消息了,所以你可以认为日志记录不是真的有效。

窗:

  • 除了python的os模块在​​Windows下没有接收它们。 Python从不喜欢Windows ...
    • 此代码序列适用于Windows(并且肯定适用于Linux):
      • import os
      • os.environ['TF_CPP_MIN_LOG_LEVEL'] = '0'
      • os.environ['TF_CPP_MIN_VLOG_LEVEL'] = '3'
      • import tensorflow as tf

Linux的:

  • 在Linux(bash)下,您可以在命令行上方便地指定这些内容,例如:
    • TF_CPP_MIN_VLOG_LEVEL=3 python tf-program.py

FWIW,我使用本教程在TensorFlow 1.7上进行了测试:

https://github.com/tensorflow/models/tree/master/tutorials/image/mnist

这就是它的样子:

enter image description here

答案 1 :(得分:1)

我通常采取的控制TensorFlow日志记录的方法是在任何TensorFlow导入之前使用这段代码

import os
import logging
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '0'
logging.getLogger("tensorflow").setLevel(logging.WARNING)

import tensorflow as tf

我很高兴听到任何更好的解决方案。

答案 2 :(得分:1)

tensorflow中确实有两个日志系统:一个在C ++核心(特别是tensorflow / core / platform / default / logging。{h,cc}),另一个在Python绑定中。 这两个系统是独立的。

Python绑定中的一个与标准Python日志记录模块很好地配合。 C ++记录器由前面答案中提到的TF_CPP_MIN_LOG_LEVEL环境变量独立控制。

以下Python(我在本地称为logtest.py)演示了两个系统的独立性。

"""
Demonstrate independence of TensorFlow's two logging subsystems.
"""

import argparse
import tensorflow as tf
import logging

_logger = logging.getLogger( "tensorflow" )

parser = argparse.ArgumentParser( description="Demo TensorFlow logging" )

parser.add_argument("-v","--verbosity",
    default="",
    choices=['DEBUG','INFO','WARNING','ERROR','CRITICAL'],
    help="One of {DEBUG,INFO,WARNING,ERROR,CRITICAL}" )

args = parser.parse_args()

print( "Initial Python effective log level:", _logger.getEffectiveLevel() )

# If user provided an explicit Python level, set it.

if args.verbosity:
    _logger.setLevel( args.verbosity   )
    print( " ...new Python effective log level:", _logger.getEffectiveLevel() ) # ...and confirm the change.

_logger.debug(    "   DEBUG messages are emitted" )
_logger.info(     "    INFO messages are emitted" )
_logger.warn(     " WARNING messages are emitted" )
_logger.error(    "   ERROR messages are emitted" )
_logger.critical( "CRITICAL messages are emitted" )

with tf.Session() as s:
    pass # ...just to trigger TensorFlow into action to generate logging.

...运行

TF_CPP_MIN_LOG_LEVEL=0 python3 logtest.py -v CRITICAL

...表明Python无法使核心日志记录系统沉默,并且

TF_CPP_MIN_LOG_LEVEL=5 python3 logtest.py -v DEBUG

...表明核心系统无法使Python沉默。

答案 3 :(得分:0)

我尝试设置TF_CPP_MIN_LOG_LEVEL,但仍然无法正常工作。 后检查此线程 https://github.com/tensorflow/tensorflow/issues/1258

如其所说

  

它是TF_CPP_MIN_VLOG_LEVEL,而不是TF_CPP_MIN_LOG_LEVEL   另外,请注意,如果设置了TF_CPP_MIN_LOG_LEVEL,则TF_CPP_MIN_VLOG_LEVEL   值会被忽略

然后我取消设置TF​​_CPP_MIN_LOG_LEVEL并再次设置TF_CPP_MIN_VLOG_LEVEL, 可以。

这两个宏让我感到困惑 希望对您有帮助。