有没有办法抑制TensorFlow打印的消息?

时间:2016-11-04 15:33:24

标签: python tensorflow

我认为这些消息在最初的几次非常重要,但它只是无用的。 它实际上使阅读和调试变得更糟。

  

我的tensorflow / stream_executor / dso_loader.cc:128]成功打开   CUDA库本地libcublas.so.8.0我   tensorflow / stream_executor / dso_loader.cc:119]无法打开CUDA   library libcudnn.so。 LD_LIBRARY_PATH:我   tensorflow / stream_executor / cuda / cuda_dnn.cc:3459]无法加载cuDNN   DSO I 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   library libcurand.so.8.0 local

有没有办法压制那些只说它成功的?

9 个答案:

答案 0 :(得分:13)

您可以使用

设置TensorFlow日志记录的详细级别
tf.logging.set_verbosity(tf.logging.ERROR)

其中ERROR可以是DEBUGINFOWARNERRORFATAL中的任何一个。请参阅the logging module

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

  • 如果您使用的是Linux,则只需grep输出以I tensorflow/开头的所有输出字符串。
  • 否则,您可以使用一些已修改的文件完全重建TensorFlow。见this answer

答案 1 :(得分:8)

除了Wintro的答案,您还可以从C侧禁用/禁止TensorFlow日志(即以单个字符开头的丑陋日志:I,E等);关于日志记录的issue打开已更新,表明您现在可以通过环境变量控制日志记录。您现在可以通过设置名为TF_CPP_MIN_LOG_LEVEL的环境变量来更改级别。它默认为0(显示所有日志),但可以设置为1以过滤掉INFO个日志,2可以设置为另外过滤掉WARNING个日志,3个过滤掉ERROR个日志。它现在似乎在掌握,并且很可能是未来版本的一部分(即r0.11之后的版本)。有关详细信息,请参阅this page。以下是使用Python更改详细程度的示例:

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

答案 2 :(得分:8)

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)

答案 3 :(得分:3)

对于仍在努力使os.environ解决方案像我一样工作的任何人,请确保在将tensorflow导入脚本之前 放置此选项,就像craymichael的回答一样:

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

答案 4 :(得分:1)

对于tensorflow 2.2,您可以使用以下几行来禁用日志记录:

import tensorflow as tf   
tf.get_logger().setLevel('ERROR')

答案 5 :(得分:1)

This 对我有用:

import logging
logging.getLogger('tensorflow').setLevel(logging.ERROR)
os.environ["KMP_AFFINITY"] = "noverbose"
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
tf.autograph.set_verbosity(3)

答案 6 :(得分:0)

我创建了一个关闭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

答案 7 :(得分:0)

考虑到先前的答案,在Tensorflow 1.14中,实际上可以通过在代码中包含以下两行来消除由库生成的所有消息:

render(){
    const arrayName = ["john", "bob", "joe", "mat", "toto", "tata"]
      let arrayEl = [];
      let row = [];
      const batchSize = 3
      for ( let i = 0, i < arrayName.length, i++ ) {
         const name = arrayName[i]
         row.push(<div className="col" key={name}>{name}</div>)

         // we have a full batch or the last element 
         if (row.length === batchSize || i === arrayName.length - 1) { 
           arrayEl.push(<div className="row" key={i/batchSize}>{row}</div>)
           row = []
         }
       }
    return (<div className="container">{arrayEl}</div>)
}

该方法同时利用了环境变量方法和Tensorflow日志记录模块。

注意:为了避免该库发出进一步的警告,必须使用兼容版本,因为现在不推荐使用标准版本。

答案 8 :(得分:0)

这对我有用,无需引入 TensorFlow 本身以外的任何软件包:

styles.css

有关更多详细信息,请查看此 TensorFlow API documentation