Tensorflow日志记录消息不会出现

i7uaboj4  于 2023-04-12  发布在  其他
关注(0)|答案(4)|浏览(152)

我使用与pip install一起安装的tensorflow 1.2.0
当我检测包括

import logging
tf.logging.set_verbosity(tf.logging.INFO)

表单的日志记录消息

logging.info('TEST')

即使有标志--tostderr,也不会出现在终端输出中。
根据this answer我也试过

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '0'

但问题依然存在,有什么想法吗

h7wcgrx3

h7wcgrx31#

TF日志记录基础:

所以关于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,就没有那么多信息消息,所以你可以认为日志记录不起作用,而实际上它是起作用的。

Windows:

  • 除了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

它看起来是这样的:

toiithl6

toiithl62#

在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沉默。

gab6jxml

gab6jxml3#

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

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

import tensorflow as tf

我很乐意听到任何更好的解决方案。

r1wp621o

r1wp621o4#

我试图设置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,它工作。
这两个宏让我很困惑,希望对你有帮助。

相关问题