有没有办法抑制TensorFlow打印的消息?
python
tensorflow
6
0

我认为这些消息在最初的几次中确实很重要,但随后毫无用处。实际上,这使读取和调试变得更糟。

我tensorflow / stream_executor / dso_loader.cc:128]在本地成功打开CUDA库libcublas.so.8.0我tensorflow / stream_executor / dso_loader.cc:119]无法打开CUDA库libcudnn.so。 LD_LIBRARY_PATH:我tensorflow / stream_executor / cuda / cuda_dnn.cc:3459]无法加载cuDNN DSO我tensorflow / stream_executor / dso_loader.cc:128]在本地成功打开CUDA库libcufft.so.8.0,我在tensorflow / stream_executor / dso_loader:cc 128]在本地成功打开CUDA库libcuda.so.1我tensorflow / stream_executor / dso_loader.cc:128]在本地成功打开CUDA库libcurand.so.8.0

有没有办法抑制那些只说成功的人?

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

您可以使用以下方式设置TensorFlow日志记录的详细级别

tf.logging.set_verbosity(tf.logging.ERROR)

其中ERROR可以是DEBUGINFOWARNERRORFATAL 。请参阅日志记录模块

但是,将此设置为ERROR并不总是会完全阻止所有INFO日志,在我看来,要完全阻止它们,您有两个主要选择。

  • 如果您使用的是Linux,则可以grep输出所有以I tensorflow/开头的输出字符串。
  • 否则,您可以使用某些修改后的文件完全重建TensorFlow。看到这个答案

如果您使用的是TensorFlow版本1(1.X),则可以使用

tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
收藏
评论

更新 (1.14之后):在这里看到我更彻底的答案(无论如何这都是一个重复的问题): https : //stackoverflow.com/a/38645250/6557588

除了Wintro的答案,您还可以从C端禁用/抑制TensorFlow日志(即,以单个字符(I,E等开头)的丑陋日志);有关日志记录的未解决问题已更新为现在可以通过环境变量控制日志记录。现在,您可以通过设置称为TF_CPP_MIN_LOG_LEVEL的环境变量来更改级别;它默认为0(显示所有日志),但可以将其设置为1以过滤出INFO日志,将其设置为2以额外过滤出WARNING日志,并设置为3以额外过滤出ERROR日志。它现在似乎已掌握,并且可能是将来版本(即r0.11之后的版本)的一部分。有关更多信息,请参见此页面 。这是使用Python更改详细程度的示例:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # or any {'0', '1', '2'}
import tensorflow as tf
收藏
评论

我创建了一个关闭TF的函数。我在程序启动时调用它。有些消息很烦人,我对此无能为力。

def tensorflow_shutup():
    """
    Make Tensorflow less verbose
    """
    try:
        # noinspection PyPackageRequirements
        import os
        from tensorflow import logging
        logging.set_verbosity(logging.ERROR)
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

        # Monkey patching deprecation utils to shut it up! Maybe good idea to disable this once after upgrade
        # noinspection PyUnusedLocal
        def deprecated(date, instructions, warn_once=True):
            def deprecated_wrapper(func):
                return func
            return deprecated_wrapper

        from tensorflow.python.util import deprecation
        deprecation.deprecated = deprecated

    except ImportError:
        pass
收藏
评论

Tensorflow v1.14开始 (是的,包括2.x版本),您可以使用本机日志记录模块使Tensorflow静默:

import logging

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # FATAL
logging.getLogger('tensorflow').setLevel(logging.FATAL)

我个人在项目中使用了它:

def set_tf_loglevel(level):
    if level >= logging.FATAL:
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
    if level >= logging.ERROR:
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    if level >= logging.WARNING:
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'
    else:
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '0'
    logging.getLogger('tensorflow').setLevel(level)

这样我就可以通过运行以下命令禁用tf日志记录:

set_tf_loglevel(logging.FATAL)

我可以重新启用

set_tf_loglevel(logging.INFO)
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号