禁用Tensorflow调试信息。

347

所谓调试信息是指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
...

5
追踪问题:https://github.com/tensorflow/tensorflow/issues/1258 - Yaroslav Bulatov
TensorFlow仍处在早期的alpha阶段,他们仍在处理与numpy和pandas的基本兼容性的错误。为了一举消除这些警告,请使用import warnings,然后使用warnings.filterwarnings('ignore'),接着运行您的tensorflow导入以及依赖于损坏的alpha-tensorflow代码的代码,最后通过warnings.resetwarnings()打开警告。此时,TensorFlow不应该宣传超过0.05的版本名称。 - Eric Leschinski
我也遇到了同样的问题,但是是在使用Tensorflow(Lite)的C++ API时出现的。在加载TF之前设置环境变量并没有帮助。官方的TF(Lite)论坛也没有提供任何帮助:https://github.com/tensorflow/tensorflow/issues/58050。唉,现在已经是2022年10月了,这个问题仍然存在。有人知道如何解决C++的问题吗? - Bart
20个回答

425

您可以使用 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

12
无法在Python3和1.13版本上运行,甚至在导入TensorFlow之前都无法运行。 - Li haonan
9
在TF2.0.0上,唯一对我有效的解决方案是在导入tensorflow之前运行它。 - salouri
2
适用于TF2.0和Python 3。在导入tensorflow之前先导入os。 - nj2237
2
即使在导入 tensorflow 之前,该代码也不能在 tf 2.4.1 和 Python 3.7 中工作。请翻译文本内容,不要解释它。 - PATHIK GHUGARE
3
无法完全覆盖所有情况。是否有一种方法可以停止所有 Tensorflow 输出,包括插件消息,比如“Metal device set to: Apple M1”?请注意,翻译时不可更改原意。 - JeffHeaton
显示剩余3条评论

245

2.0 更新 (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     | INFO             | [Default] Print all messages       
  1     | WARNING          | Filter out INFO messages           
  2     | ERROR            | Filter out INFO & WARNING messages 
  3     | NONE             | 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 模块的级别,该模块用于例如摘要操作、tensorboard、各种估算器等。

# 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 Logging的旧版本(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。


4
这也可以通过命令行完成:export TF_CPP_MIN_LOG_LEVEL="3" && python your_code.py - Andrew Hundt
有没有一种方法可以将TensorFlow的警告/错误转换为错误? - CMCDragonkai
使用 tensorflow-gpu 1.14.0。调用上述函数后,收到以下输出:tf.logging.set_verbosity 的名称已弃用,请改用 tf.compat.v1.logging.set_verbosityWARNING:tensorflow:From C:/.../NN.py:297: tf.logging.ERROR 的名称已弃用,请改用 tf.compat.v1.logging.ERROR。很高兴在这些消息后没有出现警告。 - A.Ametov
1
tf.logging.set_verbosity(tf.logging.ERROR) # 或者任何 {DEBUG, INFO, WARN, ERROR, FATAL} 对我都有效 - Amir Md Amiruzzaman
1
消息表格有误导性。由于它显示所有的消息,因此0应标记为“INFO”(显然没有“DEBUG”消息?)。同样,1应该是“WARNING”,因为它显示“WARNING”和“ERROR”消息,但不显示“INFO”消息。同样,3应该是“NONE”,因为它过滤掉所有的消息。 - jordanbtucker
显示剩余6条评论

60

为了与Tensorflow 2.0兼容,您可以使用tf.get_logger

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

3
在 TensorFlow 1.13.1 版本下对我有用。 - Abramodj
1
在1.13.1版本中对我有效。示例代码 - user1857492
4
还可以将其作为字符串使用 tf.get_logger().setLevel('ERROR') - Seb
1
这是唯一解决我关于0梯度错误的方法。 - JoeTheShmoe
1
在Jupyter Notebook中,只有这个方法对我起作用。 - Zeel B Patel

21

我也遇到了这个问题(在tensorflow-0.10.0rc0上),但是无法通过建议的答案解决过多的鼻子测试日志记录问题。

我成功地通过直接探索tensorflow记录器来解决了这个问题。虽然不是最正确的解决方法,但效果很好,只会污染直接或间接导入tensorflow的测试文件:

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

1
对我有用,而TF_CPP_MIN_LOG_LEVEL的解决方案则没有。思维敏捷! - fault-tolerant
我在使用tensorflow 1.12时,唯一有效的解决方案是... - BiBi
使用 tensorflow-gpu 1.14.0。调用上述函数后,收到以下输出:tf.logging.set_verbosity 的名称已弃用,请改用 tf.compat.v1.logging.set_verbosityWARNING:tensorflow:From C:/.../NN.py:297: tf.logging.ERROR 的名称已弃用,请改用 tf.compat.v1.logging.ERROR。很高兴在这些消息后没有出现警告。 - A.Ametov

18
我正在使用Tensorflow 2.3.1版本,但以上解决方案均不完全有效。
直到我找到了这个软件包。

安装步骤如下:

使用Anaconda:

python -m pip install silence-tensorflow

使用集成开发环境(IDE),

pip install silence-tensorflow

在第一行代码中添加:

from silence_tensorflow import silence_tensorflow
silence_tensorflow()

就是这样!


1
这是整个讨论中唯一对我有效的东西。谢谢!(我正在使用Tensorflow 2.9.1) - mime
3
需要一个单独的软件包 silence-tensorflow 来抑制 tensorflow 的输出,这是一件令人沮丧的事情。 - Bart

16

如果您仍然无法像我一样使用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.4.1中正常工作的东西。 - banderlog013
这是我唯一有效的方法。我正在使用tensorflow-2.12.* - Lion Lai

12

3
在导入TensorFlow时无法处理FutureWarnings,TensorFlow版本为1.13.1,Python版本为3。 - Oleg Kuralenko
2
只有这个对我有效!我的配置:Keras '2.2.4'(使用tf 1.15.0)和Python 3.7.4。 - Mohamad Kouhi Moghadam

11

由于 TF_CPP_MIN_LOG_LEVEL 对我无效,您可以尝试:

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

在tensorflow v1.6.0中对我有用


6

通常的Python3日志管理器在使用tensorflow==1.11.0时对我有效:

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

3

对于tensorflow 2.1.0版本,以下代码可以正常工作。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接