首页 > 解决方案 > 记录 python 包不适用于 Keras

问题描述

我使用 python 编写了一个脚本,它执行了一些任务,最后使用 Keras 加载模型和预测。到目前为止,我使用“打印”来获取一些信息/调试到控制台,但现在我需要使用日志来代替。看起来 keras 包正在干扰日志记录包。如果导入了 Keras load_model,则日志记录不起作用。但是,如果我不导入 keras,(python)日志记录工作正常。

这里已经有问题了: Keras interfering with python logging

我尝试使用建议的答案,但仍然无法正常工作。将不胜感激任何帮助,谢谢。

请参阅下面的代码以重现:

这有效:

import logging as my_logging
from datetime import datetime
#from keras.models import load_model


time_f = datetime.now().strftime('%m%d%Y_%H%M')
save_path = 'C:/folder/'
log = save_path+"automation_log_" + time_f + ".log"
my_logging.basicConfig(level=my_logging.INFO, format='%(asctime)s [%(levelname)-5.5s] %(message)s',
                    datefmt='%d/%m/%Y %H:%M:%S',
                    handlers=[my_logging.FileHandler("{0}".format(log)), my_logging.StreamHandler()])

my_logging.warning('Watch out!')
my_logging.info('info test!')

这不是:

import logging as my_logging
from datetime import datetime
from keras.models import load_model


time_f = datetime.now().strftime('%m%d%Y_%H%M')
save_path = 'C:/folder/'
log = save_path+"automation_log_" + time_f + ".log"
my_logging.basicConfig(level=my_logging.INFO, format='%(asctime)s [%(levelname)-5.5s] %(message)s',
                    datefmt='%d/%m/%Y %H:%M:%S',
                    handlers=[my_logging.FileHandler("{0}".format(log)), my_logging.StreamHandler()])

my_logging.warning('Watch out!')
my_logging.info('info test!')

标签: pythontensorflowloggingkeras

解决方案


这个问题的根本原因在于0.7.0包的版本,abseil它已经在它的版本中得到修复,正如这个Github 链接0.8.0中提到的。

总之,解决这个问题的方法就是将包的版本升级abseil到大于等于0.8。

突出显示该问题的代码如下所示:

!pip install absl-py==0.7
!pip show absl-py # This outputs 0.7

import logging as my_logging
from datetime import datetime
from keras.models import load_model

time_f = datetime.now().strftime('%m%d%Y_%H%M')
save_path = 'sample_data'
log = save_path+"automation_log_" + time_f + ".log"
my_logging.basicConfig(level=my_logging.INFO, format='%(asctime)s [%(levelname)-5.5s] %(message)s',
                    datefmt='%d/%m/%Y %H:%M:%S',
                    handlers=[my_logging.FileHandler("{0}".format(log)), my_logging.StreamHandler()])

my_logging.warning('Watch out!')
my_logging.info('info test!')

上面代码的输出是Nothing

现在,让我们升级包,abseil.

!pip install --upgrade absl-py

让我们检查一下现在的版本abseil

!pip show absl-py

上述命令的输出是

Name: absl-py
Version: 0.9.0

现在,如果我们执行代码,

import logging as my_logging
from datetime import datetime
from keras.models import load_model

time_f = datetime.now().strftime('%m%d%Y_%H%M')
save_path = 'sample_data'
log = save_path+"automation_log_" + time_f + ".log"
my_logging.basicConfig(level=my_logging.INFO, format='%(asctime)s [%(levelname)-5.5s] %(message)s',
                    datefmt='%d/%m/%Y %H:%M:%S',
                    handlers=[my_logging.FileHandler("{0}".format(log)), my_logging.StreamHandler()])

my_logging.warning('Watch out!')
my_logging.info('info test!')

输出是:

Using TensorFlow backend.
14/05/2020 08:03:00 [WARNI] Watch out!
14/05/2020 08:03:00 [INFO ] info test!

希望这可以帮助。快乐学习!


推荐阅读