【问题标题】:Keras interfering with python loggingKeras 干扰 python 日志记录
【发布时间】:2019-09-07 17:50:39
【问题描述】:

我想记录一些加载到训练有素的 keras 模型中的 python 代码。出于某种原因,如果导入了 keras load_model,则 (python) 日志记录不起作用。但是,如果我不导入 keras,(python)日志记录工作正常。

这行得通:

import logging

LOG_FORMAT = "%(levelname)s %(asctime)s - %(message)s"
logging.basicConfig(filename="logs/my_logs.log",
                    level=logging.DEBUG,
                    format=LOG_FORMAT)
logger = logging.getLogger()

def do_stuff():
    logging.info("About to do stuff")
    ... stuff gets done here...

这行不通

import logging
from keras.models import load_model

my_model = load_model("fetch_preprocess/lstm_model.h5")

LOG_FORMAT = "%(levelname)s %(asctime)s - %(message)s"
logging.basicConfig(filename="logs/my_logs.log",
                    level=logging.DEBUG,
                    format=LOG_FORMAT)
logger = logging.getLogger()

def do_stuff():
    logging.info("About to do stuff")
    pred = my_model.predict(data)
    ... stuff gets done here...

“不起作用”是指logging 模块不起作用

  • 创建一个新的日志文件
  • 在调用logging 时写入该文件

但不会抛出任何错误。所以我觉得这很奇怪。

我相信 Keras / tensorflow 会干扰日志记录(因为我对代码所做的唯一更改是排除 Keras,然后日志记录工作正常)。

有什么方法可以抑制 keras 在后台执行的操作,以便我可以使用 python 日志记录?

【问题讨论】:

    标签: python tensorflow logging keras


    【解决方案1】:

    这个问题是由于包的0.7.0 版本abseil 中的错误,并且它已在其0.8.0 版本中修复,如Github link 中所述。

    解决这个问题的方法是将包abseil升级到大于等于0.8。

    示例代码

    • 创建一个新的日志文件并
    • 在调用日志记录时写入该文件

    如下图:

    `

    !pip install --upgrade absl-py
    
    import logging
    from keras.models import load_model
    
    my_model = load_model("fetch_preprocess/lstm_model.h5")
    
    LOG_FORMAT = "%(levelname)s %(asctime)s - %(message)s"
    logging.basicConfig(filename="logs/my_logs.log",
                        level=logging.DEBUG,
                        format=LOG_FORMAT)
    logger = logging.getLogger()
    
    def do_stuff():
        logging.info("About to do stuff")
        pred = my_model.predict(data)
        ... stuff gets done here...
    
    do_stuff()
    

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

    【讨论】:

      【解决方案2】:

      正如你提到的,我也认为Keras 只是用它自己的记录器替换你的记录器。但是,您可以执行以下操作:

      import logging as my_logging
      from keras.models import load_model
      
      my_model = load_model("fetch_preprocess/lstm_model.h5")
      
      LOG_FORMAT = "%(levelname)s %(asctime)s - %(message)s"
      my_logging.basicConfig(filename="logs/my_logs.log",
                          level=my_logging.DEBUG,
                          format=LOG_FORMAT)
      my_logger = my_logging.getLogger()
      

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        相关资源
        最近更新 更多