我正在使用TensorFlow-Slim,它有一些有用的日志记录打印到tf.logging
的控制台。我想将这些记录重定向到文本文件,但无法找到方法。我查看了tf_logging.py
源代码,该代码公开了以下内容,但似乎没有将日志写入文件的选项。如果我错过了什么,请告诉我。
__all__ = ['log', 'debug', 'error', 'fatal', 'info', 'warn', 'warning',
'DEBUG', 'ERROR', 'FATAL', 'INFO', 'WARN',
'flush', 'log_every_n', 'log_first_n', 'vlog',
'TaskLevelStatusMessage', 'get_verbosity', 'set_verbosity']
答案 0 :(得分:24)
import logging
# get TF logger
log = logging.getLogger('tensorflow')
log.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# create file handler which logs even debug messages
fh = logging.FileHandler('tensorflow.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(fh)
我的解决方案受到this thread的启发。
答案 1 :(得分:4)
你是对的,没有任何动向你这样做。
如果你真的,肯定,绝对不能忍受,tf.logging
基于python日志记录。所以,
import logging
tf.logging._logger.basicConfig(filename='tensorflow.log', level=logging.DEBUG)
请注意,您自行处于不受支持的路径上,并且该行为可能随时中断。
您也可以在我们的github issue页面上提交功能请求。
答案 2 :(得分:1)
一个简单的解决方法是将输出从命令行定向到文件。例如,
python training.py 1> output.log 2> error.log
# 1 for stdout stream and 2 for stderr stream
根据已接受的答案,这样做的好处是您可以获得所有日志。原因是并非所有日志记录都来自python(请记住,运行时是在C ++中实现的)。例如,通过设置环境变量,您可以获得非常有用的调试日志记录(包括有关Tensor内存分配的信息)。
import os
os.environ['TF_CPP_MIN_VLOG_LEVEL'] = '3'
(使用注意进行此操作。日志量惊人。)
要了解如何在C ++中实现日志记录,
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/logging.h https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/logging.cc
特别是,似乎在此行中将日志记录消息写入stderr:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/logging.cc#L73
我在讨论here
中引用了该内容答案 3 :(得分:0)
如果您在项目中使用python日志记录,其中一个选项是在日志配置文件中定义名称为“tensorflow”的记录器。
然后_logger = _logging.getLogger('tensorflow')
将使用配置文件中的记录器和指定的处理程序。