通过调试信息,我指的是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 2.0,你可以使用tf.get_logger

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

其他回答

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

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

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

我用这篇文章解决了无法删除所有警告#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.3.1版本,上面的解决方案都没有完全有效。 直到我找到这个包裹。

像这样安装:

水蟒,

python -m pip install silence-tensorflow

ide,

pip install silence-tensorflow

并在第一行代码中添加:

from silence_tensorflow import silence_tensorflow
silence_tensorflow()

就是这样!

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

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()可以确保没有副作用。