我将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
,其他所有消息都不会。
请,如果有人想一劳永逸地解决此问题,请在下面告诉我。
答案 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