我使用的是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']发布于 2017-06-01 08:20:17
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。
发布于 2016-11-12 13:19:54
你说得对,没有什么旋钮可以让你这么做。
如果你真的,肯定地,绝对不能接受,tf.logging是基于python日志记录的。所以,import logging tf.logging._logger.basicConfig(filename='tensorflow.log', level=logging.DEBUG)
请注意,您自己在不受支持的路径上,并且该行为随时可能中断。
您也可以在我们的github issue页面上提交功能请求。
发布于 2020-03-25 08:19:16
一种简单的解决方法是将命令行的输出定向到文件。例如,
python training.py 1> output.log 2> error.log
# 1 for stdout stream and 2 for stderr stream根据公认的答案,这样做的好处是您可以获得所有的日志。原因是并不是所有的日志都来自python (记住运行时是用C++实现的)。例如,通过设置环境变量,您可以获得非常有用的调试日志(包括有关张量内存分配的信息)。
import os
os.environ['TF_CPP_MIN_VLOG_LEVEL'] = '3'(使用CAUTION执行此操作。日志记录的数量惊人。)
要了解日志记录是如何在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中的
https://stackoverflow.com/questions/40559667
复制相似问题