关闭Tensorflow调试信息开关

通过调试信息,我指的是TensorFlow在我的终端中显示的关于加载的库和找到的设备等的信息,而不是Python错误。

I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:900] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties:
name: Graphics Device
major: 5 minor: 2 memoryClockRate (GHz) 1.0885
pciBusID 0000:04:00.0
Total memory: 12.00GiB
Free memory: 11.83GiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:717] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:04:00.0)
I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:51] Creating bin of max chunk size 1.0KiB
...
275217 次浏览

2.0 Update (10/8/19) 设置TF_CPP_MIN_LOG_LEVEL仍然可以工作(参见下文v0.12+更新),但2.0版本直到2.3版本都有报告问题。Z固定在2.4及以后。如果设置TF_CPP_MIN_LOG_LEVEL对你不起作用(再次,参见下文),尝试执行以下操作来设置日志级别

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

此外,请参阅tf.autograph.set_verbosity上的文档,该文档设置了签名日志消息的详细信息-例如:

# Can also be set using the AUTOGRAPH_VERBOSITY environment variable
tf.autograph.set_verbosity(1)

v0.12+更新(5/20/17),通过TF 2.0+工作:

在TensorFlow 0.12+中,根据这个问题,你现在可以通过名为TF_CPP_MIN_LOG_LEVEL的环境变量来控制日志记录;它默认为0(显示所有日志),但可以在Level列下设置为以下值之一。

  Level | Level for Humans | Level Description
-------|------------------|------------------------------------
0     | DEBUG            | [Default] Print all messages
1     | INFO             | Filter out INFO messages
2     | WARNING          | Filter out INFO & WARNING messages
3     | ERROR            | Filter out all messages

请参阅下面使用Python的通用操作系统示例:

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

您可以在运行脚本的环境中设置此环境变量。例如,在bash中,它可以在文件~/.bashrc/etc/environment/etc/profile中,或者在实际的shell中:

TF_CPP_MIN_LOG_LEVEL=2 python my_tf_script.py

为了更彻底,还可以调用Python tf_logging模块的set level,该模块用于例如摘要运算、张量板、各种估计器等。

# append to lines above
tf.logging.set_verbosity(tf.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}

对于1.14,如果你没有更改为使用v1 API,你会收到如下警告:

# append to lines above
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}

**用于TensorFlow或TF-Learn日志记录的先前版本(v0.11)。X或更低):**

查看下面的页面,了解TensorFlow日志记录的信息;使用新的更新,您可以将日志详细信息设置为DEBUGINFOWARNERRORFATAL。例如:

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

该页还介绍了可以与TF-Learn模型一起使用的监视器。这是页面

这个阻塞了所有的日志记录(只有TF-Learn)。我有两个解;一个是“技术上正确的”解决方案(Linux),另一个涉及重建TensorFlow。

script -c 'python [FILENAME].py' | grep -v 'I tensorflow/'

至于另一个,请参见这个答案,其中涉及修改源代码和重建TensorFlow。

我也有这个问题(在tensorflow-0.10.0rc0上),但无法通过建议的答案修复过多的鼻子测试日志问题。

我设法通过直接探测张量流记录器来解决这个问题。不是最正确的修复,但工作很好,只污染直接或间接导入tensorflow的测试文件:

# Place this before directly or indirectly importing tensorflow
import logging
logging.getLogger("tensorflow").setLevel(logging.WARNING)

你可以使用os.environ关闭所有的调试日志:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf

在tf 0.12和1.0上测试

在细节,

0 = all messages are logged (default behavior)
1 = INFO messages are not printed
2 = INFO and WARNING messages are not printed
3 = INFO, WARNING, and ERROR messages are not printed

由于TF_CPP_MIN_LOG_LEVEL不适合我,你可以试试:

tf.logging.set_verbosity(tf.logging.WARN)

在tensorflow v1.6.0中为我工作过

为了增加一些灵活性,你可以通过编写一个过滤消息的函数来实现对日志级别的更细粒度的控制:

logging.getLogger('tensorflow').addFilter(my_filter_func)

,其中my_filter_func接受LogRecord对象作为输入[LogRecord文档]和 如果您希望抛出消息,则返回0;非零。< / p > 下面是一个示例过滤器,只保留每n条信息消息(Python 3到期 到这里nonlocal的使用):

def keep_every_nth_info(n):
i = -1
def filter_record(record):
nonlocal i
i += 1
return int(record.levelname != 'INFO' or i % n == 0)
return filter_record


# Example usage for TensorFlow:
logging.getLogger('tensorflow').addFilter(keep_every_nth_info(5))

以上所有都假设TensorFlow已经设置了它的日志记录状态。你可以通过在添加过滤器之前调用tf.logging.get_verbosity()来确保这没有副作用。

通常的python3日志管理器为我工作tensorflow==1.11.0:

import logging
logging.getLogger('tensorflow').setLevel(logging.INFO)

对于与Tensorflow 2.0兼容,可以使用tf.get_logger

import logging
tf.get_logger().setLevel(logging.ERROR)

我解决了这个帖子无法删除所有警告#27045,解决方案是:

import logging
logging.getLogger('tensorflow').disabled = True

是的,我正在使用tf 2.0 beta,并想启用/禁用默认日志记录。tf1中的环境变量和方法。X似乎不再存在了。

我在PDB中发现了这个方法:

# close the TF2 logger
tf2logger = tf.get_logger()
tf2logger.error('Close TF2 logger handlers')
tf2logger.root.removeHandler(tf2logger.root.handlers[0])

然后添加自己的日志记录器API(在本例中是基于文件的)

logtf = logging.getLogger('DST')
logtf.setLevel(logging.DEBUG)


# file handler
logfile='/tmp/tf_s.log'
fh = logging.FileHandler(logfile)
fh.setFormatter( logging.Formatter('fh %(asctime)s %(name)s %(filename)s:%(lineno)d :%(message)s') )
logtf.addHandler(fh)
logtf.info('writing to %s', logfile)

对于tensorflow 2.1.0,以下代码运行正常。

import tensorflow as tf
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

如果你只需要消除屏幕上的警告输出,你可能想在导入tensorflow后立即使用这个简单的命令来清除控制台屏幕(根据我的经验,它比禁用所有调试日志更有效):

在windows中:

import os
os.system('cls')

在Linux或Mac中:

import os
os.system('clear')

上面的解决方案都不能解决我的问题在Jupyter笔记本,所以我使用下面的片段代码下面的西科里拉,问题解决了。

import warnings
with warnings.catch_warnings():
warnings.filterwarnings("ignore",category=FutureWarning)
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer


print('Done')

对于任何仍然努力让os.environ解决方案工作的人,检查这是放置之前,你在你的脚本中导入tensorflow,就像mwweb的答案:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # or any {'0', '1', '2'}
import tensorflow as tf
我使用的是Tensorflow 2.3.1版本,上面的解决方案都没有完全有效。
直到,我找到

像这样安装:

水蟒,

python -m pip install silence-tensorflow

ide,

pip install silence-tensorflow

并在第一行代码中添加:

from silence_tensorflow import silence_tensorflow
silence_tensorflow()

就是这样!

我为此奋斗了一段时间,尝试了几乎所有的解决方案,但无法摆脱TF 1.14中的调试信息,我已经尝试了以下多个解决方案:

import os
import logging
import sys


os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # FATAL
stderr = sys.stderr
sys.stderr = open(os.devnull, 'w')


import tensorflow as tf
tf.get_logger().setLevel(tf.compat.v1.logging.FATAL)
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
logging.getLogger('tensorflow').setLevel(tf.compat.v1.logging.FATAL)


sys.stderr = stderr


import absl.logging
logging.root.removeHandler(absl.logging._absl_handler)
absl.logging._warn_preinit_stderr = False

调试信息仍然显示,最终帮助我重新启动我的电脑(实际上重新启动内核应该工作)。所以如果有人有类似的问题,试着在你设置环境变量后重新启动内核,简单但可能不会想到。

大多数答案在这里工作,但你必须使用他们每次你打开一个新的会话(例如与JupyterLab)。要使更改生效,必须设置环境变量。

Linux:

export TF_CPP_MIN_LOG_LEVEL="3"

(也可以将上面的行添加到.bashrc中,使更改永久,而不仅仅是针对会话)

窗口:

setx TF_CPP_MIN_LOG_LEVEL "3"

两者都为用户设置环境变量。