我认为这些消息在最初的几次非常重要,但它只是无用的。 它实际上使阅读和调试变得更糟。
我的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
有没有办法压制那些只说它成功的?
答案 0 :(得分:13)
您可以使用
设置TensorFlow日志记录的详细级别tf.logging.set_verbosity(tf.logging.ERROR)
其中ERROR
可以是DEBUG
,INFO
,WARN
,ERROR
或FATAL
中的任何一个。请参阅the logging module。
但是,将此设置为ERROR
并不总是完全阻止所有INFO
个日志,为了完全阻止它们,我认为您有两个主要选择。
grep
输出以I tensorflow/
开头的所有输出字符串。答案 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)