python - 记录 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!')
解决方案
这个问题的根本原因在于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!
希望这可以帮助。快乐学习!
推荐阅读
- android - 为什么删除 gradle 中的 rootProject.buildDir 任务删除了模块中的构建目录
- json - 将数据从 JSON 文件加载到 html/ 控制台
- java - java中的封闭变量是什么?
- bash - Bash 脚本接受有效数字格式的变量
- angular - 带有防护的Angular 5单元测试路线
- python - 使用 kivy 复选框进行事件处理
- eclipse - 如何在 Eclipse 中完全禁用 SVN?
- angular - 离子onclick滚动到页面底部不起作用
- shopify - 任何人都可以详细说明 Shopify 默认的 _st js 对象吗?
- spring - 无法使用带有 Spring Security 的 LDAP 用户搜索查询来验证具有 LDAP 服务器的用户