Python 完全禁用Tensorflow日志记录

Python 完全禁用Tensorflow日志记录,python,python-3.x,tensorflow,keras,Python,Python 3.x,Tensorflow,Keras,我将Keras和Tensorflow用于神经网络,但是Tensorflow将我的主记录器的日志加倍,它使用StreamHandler,并且它的警告不能完全禁用 我从导入一开始就尝试手动禁用消息和日志记录,它确实禁用了Keras(使用Tensorflow backend)和Tensorflow正在发送的许多消息,但出现了双重问题 这就是我目前正在使用的 导入操作系统 导入日志记录 操作系统环境['TF\u CPP\u MIN\u LOG\u LEVEL']=“4” logging.getLogge

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

我从导入一开始就尝试手动禁用消息和日志记录,它确实禁用了Keras(
使用Tensorflow backend
)和Tensorflow正在发送的许多消息,但出现了双重问题

这就是我目前正在使用的

导入操作系统
导入日志记录
操作系统环境['TF\u CPP\u MIN\u LOG\u LEVEL']=“4”
logging.getLogger('tensorflow')。disabled=True
导入系统
stderr=sys.stderr
sys.stderr=open(os.devnull,'w')
进口干酪
sys.stderr=stderr
从keras.layers导入激活、致密、脱落
从keras.models导入顺序加载模型
从keras.optimizers导入新加坡元
从keras.backend.tensorflow_后端导入tf
logger=tf.get_logger()
logger.disabled=True
logger.setLevel(logging.FATAL)
这段代码仍然是丑陋和庞大的,即使是暂时的,替换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
它应该存在的唯一信息是
INFO | Systems ready
,其他信息都不应该存在


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

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

导入操作系统
导入系统
导入日志记录
操作系统环境['TF\u CPP\u MIN\u LOG\u LEVEL']=“3”
#Keras使用'print'向stderr输出警告,所以让我们暂时将其定向到devnull
stderr=sys.stderr
sys.stderr=open(os.devnull,'w')
进口干酪
#我们结束了
sys.stderr=stderr
从keras.backend.tensorflow_后端导入tf
导入absl日志
logging.root.removeHandler(absl.logging.\u absl\u handler)
absl.logging.\u warn\u preinit\u stderr=False
logger=tf.get_logger()
logger.setLevel(logging.FATAL)
graph=tf.get\u default\u graph()

我也有同样的问题,但我无法解决

我试过所有常见的嫌疑犯,所以建议

import pandas as pd
import os
import numpy as np
from sklearn import preprocessing
from sklearn.metrics import mean_squared_error, mean_absolute_error
import tensorflow as tf
from tensorflow.python.keras.models import load_model, model_from_json
unique_str = datetime.now().isoformat().replace(':', '_').replace('.', '_').replace('-', '_')
LOG_FILENAME = 'tmp' + os.sep + 'logs' + os.sep + 'masterPVTrainer_'+unique_str+'.log'
LOG_FORMAT = '%(asctime)s %(name)-12s %(levelname)-8s %(funcName)s %(lineno)5d :%(message)s'
if __name__ == "__main__":
    # eager execution does not allow tensorboard
    # tf.enable_eager_execution()
    # Add the log message handler to the logger
    handler = handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=5000000, backupCount=50)
    handler.setFormatter(logging.Formatter(LOG_FORMAT, datefmt='%m-%d %H:%M:%S'))
    handler.setLevel(logging.DEBUG)
    # logging.getLogger('tensorflow').disabled = True
    # tf_logger = tf.get_logger()
    # tf_logger.setLevel(logging.DEBUG)
    # logging.basicConfig(format=LOG_FORMAT)
    my_logger = logging.getLogger(__name__)
    # Add this handler to the root logger
    my_logger.addHandler(handler)
    my_logger.debug('debug')
    my_logger.info('info')
    my_logger.warning('warning')
    my_logger.error('error')
    main(my_logger)
除警告和错误消息外,日志文件中未显示任何内容。我放弃了,正在使用警告错误作为调试消息。真烂

 08-29 13:39:28 __main__     WARNING  <module>   973 :warning 
 08-29 13:39:28 __main__     ERROR    <module>   974 :error
08-29 13:39:28警告973:警告
08-29 13:39:28主要错误974:错误
版本:

win32上的Python 3.6.8(tags/v3.6.8:3C6B436A572018年12月24日00:16:47)[MSC v.1916 64位(AMD64)]

Tensorflow版本:2.0.0-alpha0

Keras版本:2.2.4-tf

熊猫版本:0.24.2

Numpy版本:1.16.4


通常这两行代码对我来说很有用:
os.environ[“TF\u CPP\u MIN\u LOG\u LEVEL”]=“2”;tf.logging.set_verbosity(tf.logging.ERROR)
不确定为什么它对我不起作用,其他人也声称它起作用这不是答案,但我的答案起作用了,成功地禁用了双重日志记录和所有这些丑陋的打印,请查看。这是使用tensorflow 1.14和tensorflow.python.keras对我唯一起作用的东西,谢谢你,伙计!