完全禁用 Tensorflow 日志记录

Dan*_*iel 5 python python-3.x keras tensorflow

我将 Keras 和 Tensorflow 用于神经网络,但是 Tensorflow 正在将我的主记录器的日志记录加倍,它使用 StreamHandler,并且它的警告不能完全禁用。

我尝试从导入的一开始就手动禁用消息和日志记录,它确实禁用了Using Tensorflow backendKeras ( ) 和 Tensorflow 正在发送的大量消息,但是发生了加倍问题。

这是我目前正在使用的。

import os
import logging
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '4'
logging.getLogger('tensorflow').disabled = True
import sys
stderr = sys.stderr
sys.stderr = open(os.devnull, 'w')
import keras
sys.stderr = stderr
from keras.layers import Activation, Dense, Dropout
from keras.models import Sequential, load_model
from keras.optimizers import SGD
from keras.backend.tensorflow_backend import tf
logger = tf.get_logger()
logger.disabled = True
logger.setLevel(logging.FATAL)
Run Code Online (Sandbox Code Playgroud)

该代码仍然丑陋而庞大,即使它是临时的,替换 sys.stderr 个人也非常不专业。最糟糕的是,我的问题只修复了一部分,我的控制台仍然输出:

WARNING: Logging before flag parsing goes to stderr.
I0817 17:59:30.386165  5752 social.py:42] Social loaded
  INFO     | Systems ready
I0817 17:59:30.401529  5752 __init__.py:63] Systems ready
Run Code Online (Sandbox Code Playgroud)

它应该存在的唯一消息是INFO | Systems ready,其他一切都不应该存在。

请,如果有人知道如何一劳永逸地解决这个问题,请在下面告诉我。

Dan*_*iel 5

对于任何处理相同问题的人来说,这似乎是另一个图书馆的问题。这里的代码应该可以禁用 Keras 的弃用警告和 Tensorflow 的丑陋日志记录,这仍然很丑,所以如果有人有更好的方法来做到这一点,我真的很想听听。这也修复了双重日志记录。

import os
import sys
import logging

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

# Keras outputs warnings using `print` to stderr so let's direct that to devnull temporarily
stderr = sys.stderr
sys.stderr = open(os.devnull, 'w')

import keras

# we're done
sys.stderr = stderr

from keras.backend.tensorflow_backend import tf

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

logger = tf.get_logger()
logger.setLevel(logging.FATAL)

graph = tf.get_default_graph()
Run Code Online (Sandbox Code Playgroud)