通过调试信息,我指的是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
...

当前回答

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

在windows中:

import os
os.system('cls')

在Linux或Mac中:

import os
os.system('clear')

其他回答

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

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

where my_filter_func接受LogRecord对象作为输入[LogRecord docs]和 如果您希望抛出消息,则返回0;非零。

下面是一个示例过滤器,它只保留每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()可以确保没有副作用。

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

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

在测试了各种建议之后,他们也可以沉默使用PyInstaller构建的可执行文件,我想出了这样的设置:

import logging
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
logging.getLogger('tensorflow').setLevel(logging.ERROR)

import tensorflow as tf

这条线

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

将关闭重建TensorFlow的警告:

我tensorflow / /平台/ cpu_feature_guard核心。这个TensorFlow二进制文件是用onapi深度神经网络库(oneDNN)优化的,可以在性能关键操作中使用以下CPU指令:AVX2 FMA。 要在其他操作中启用它们,请使用适当的编译器标志重新构建TensorFlow。

这条线

logging.getLogger('tensorflow').setLevel(logging.ERROR)

将取消对AutoGraph的警告:

警告:tensorflow:AutoGraph在此环境中不可用:函数缺少代码信息。这是一些典型的环境,如交互式Python shell。更多信息请参见https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/autograph/g3doc/reference/limitations.md#access-to-source-code。

关键是在导入tensorflow之前放置这两个文件——尽管Pylint警告过!

tensorflow 2.11.0

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     | 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模块的级别设置,该模块用于例如摘要操作,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}

**For Prior Versions of TensorFlow or TF-Learn Logging (v0.11.x or lower):**

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

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)