深度学习模型常用配置模版-日志文件写入logger

【写在前面】之前搭建深度学习模型的过程中并没有对模型中一些定式化的部分进行整理,现在为了让模型风格更加统一,可读性更强,便于维护,对相关配置模版代码进行整理,并放在GitHub上,随取随用,欢迎star~
Github仓库链接:https://github.com/FutureForMe/ConfigTemplates

在进行深度学习模型训练的过程中,一般会设置log日志,将训练过程的中间结果以及最终结果写入,方便再次打开的时候进行查看。

logging提供了一组便利的函数,用来做简单的日志,根据严重程度由低到高为: debug()info()warning()error()critical()

级别 何时使用
debug 详细信息,一般只在调试问题时使用。
info 证明事情按预期工作。
warning 某些没有预料到的事件的提示,或者在将来可能会出现的问题提示。(默认等级)
error 由于更严重的问题,软件已不能执行一些功能了。
critical 严重错误,表明软件已不能继续运行了。

logging既可以输出到屏幕(终端显示),也可以输出到文件,为了在模型中断或者运行时间较长时方便查看log信息,个人建议同时将中间结果及相关信息同时输出到屏幕和文件。如下代码可以直接复制到项目中使用,代码后面将会对每个模块进行详细介绍。

import logging
import argparse


def create_logger(logger_file_name):
    """
    :param logger_file_name:
    :return:
    """
    logger = logging.getLogger()         # 设定日志对象
    logger.setLevel(logging.INFO)        # 设定日志等级

    file_handler = logging.FileHandler(logger_file_name)   # 文件输出
    console_handler = logging.StreamHandler()              # 控制台输出
	
	# 输出格式
    formatter = logging.Formatter(
        "%(asctime)s %(levelname)s: %(message)s "
    )
    
    file_handler.setFormatter(formatter)       # 设置文件输出格式
    console_handler.setFormatter(formatter)    # 设施控制台输出格式
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    return logger


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='configTemplates')
    parser.add_argument('-log_path', default='./results/test.log', type=str, help='log file path to save result')

    args = parser.parse_args()

    logger = create_logger(args.log_path)

    logger.info('Begin Training Model...')

logging库采取了模块化的设计,提供了许多组件:记录器、处理器、过滤器和格式化器。

  • Logger: 暴露了应用程序代码能直接使用的接口。
  • Handler: 将(记录器产生的)日志记录发送至合适的目的地。
  • Filter: 提供了更好的粒度控制,它可以决定输出哪些日志记录。
  • Formatter: 指明了最终输出中日志记录的布局。
1. Logger

Logger 对象要做三件事情。首先,它们向应用代码暴露了许多方法,这样应用可以在运行时记录消息。其次,记录器对象通过严重程度(默认的过滤设施)或者过滤器对象来决定哪些日志消息需要记录下来。第三,记录器对象将相关的日志消息传递给所有感兴趣的日志处理器。

常用的记录器对象的方法分为两类:配置发送消息

这些是最常用的配置方法:

Logger.setLevel(): 指定logger将会处理的最低的安全等级日志信息, debug是最低的内置安全等级,critical是最高的内建安全等级。例如,如果严重程度为INFO,记录器将只处理INFO,WARNING,ERROR和CRITICAL消息,DEBUG消息被忽略。
Logger.addHandler()Logger.removeHandler(): 从记录器对象中添加和删除处理程序对象。处理器详见Handlers。
Logger.addFilter()Logger.removeFilter(): 从记录器对象添加和删除过滤器对象。

2.Handlers

处理程序对象负责将适当的日志消息(基于日志消息的严重性)分派到处理程序的指定目标。Logger 对象可以通过addHandler()方法增加零个或多个handler对象。举个例子,一个应用可以将所有的日志消息发送至日志文件,所有的错误级别(error)及以上的日志消息发送至标准输出,所有的严重级别(critical)日志消息发送至某个电子邮箱。在这个例子中需要三个独立的处理器,每一个负责将特定级别的消息发送至特定的位置。

常用的有4种,这里仅介绍常用的2种:

  • logging.StreamHandler -> 控制台输出

使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。

它的构造函数是:
StreamHandler([strm])
其中strm参数是一个文件对象。默认是sys.stderr

  • logging.FileHandler -> 文件输出

和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。它的构造函数是:
FileHandler(filename[,mode])
filename是文件名,必须指定一个文件名。
mode是文件的打开方式。默认是’a’,即添加到文件末尾。

4.Formatters

Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。


参考博客:https://www.cnblogs.com/nancyzhu/p/8551506.html

你可能感兴趣的:(深度学习模型常用配置模板,深度学习,人工智能,机器学习)