完全禁用Tensorflow日志记录

时间:2019-08-17 19:20:05

标签: python python-3.x tensorflow keras

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

我从导入开始就尝试手动禁用消息和日志记录,但确实禁用了很多Keras(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 )和Tensorflow正在发送的消息,但是出现了双重问题。

这是我目前正在使用的。

INFO     | Systems ready

该代码仍然很丑陋,即使是临时代码,并且替换sys.stderr仍然是非常不专业的。最糟糕的是,我的问题中只有一部分得到解决,我的控制台仍然输出以下内容:

opts[:subject]

它应该存在的唯一消息是# https://github.com/plataformatec/devise/wiki/How-To:-Use-custom-mailer class DeviseMailer < Devise::Mailer helper :application include Devise::Controllers::UrlHelpers default template_path: 'devise/mailer' def confirmation_instructions(record, token, opts={}) opts[:subject] = ... opts[:from] = ... opts[:reply_to] = ... super end end ,其他所有消息都不会。

请,如果有人想一劳永逸地解决此问题,请在下面告诉我。

2 个答案:

答案 0 :(得分:0)

对于在那里处理相同问题的任何人,这似乎是另一个库的问题。 此处的这段代码应该可以解决禁用Keras的过时警告和Tensorflow的丑陋日志记录的问题,这仍然很丑陋,因此,如果有人有更好的方法可以做到这一点,我真的很想听听。 这也解决了双重记录问题。

import os
import logging
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
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 import regularizers
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.disabled = True
logger.setLevel(logging.FATAL)
graph = tf.get_default_graph()

答案 1 :(得分:0)

我遇到了同样的问题,无法解决

我已经尝试了所有常见的嫌疑人和建议。

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
  

版本:

     

在Win32上使用Python 3.6.8(tags / v3.6.8:3c6b436a57,2018年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