【Python深度学习】——使用Logging记录模型训练过程

【Python深度学习】------使用Logging记录模型训练过程

  • [1. 导入logging库, getLogger()创建日志记录器](#1. 导入logging库, getLogger()创建日志记录器)
  • [2. logger.setLevel()设置log级别](#2. logger.setLevel()设置log级别)
  • [3. FileHandler()设置日志文件路径](#3. FileHandler()设置日志文件路径)
  • [4. StreamHandler()将日志输出到控制台](#4. StreamHandler()将日志输出到控制台)
  • [5. 其他性质](#5. 其他性质)
  • [6. 代码示例](#6. 代码示例)

1. 导入logging库, getLogger()创建日志记录器

python 复制代码
import logging
logger = logging.getLogger()

在getLogger()函数中,可以设置日志记录器的名称, 例如:

python 复制代码
logger = logging.getLogger(__name__)
## 或者
logger = logging.getLogger('my_logger')

2. logger.setLevel()设置log级别

python 复制代码
logger.setLevel(level=logging.DEBUG)
级别 示例 级别数值
DEBUG logging.debug 10
INFO logging.info 20
WARNING logging.warning 30
ERROR logging.error 40
CRITICAL logging.critical 50

3. FileHandler()设置日志文件路径

python 复制代码
file_handler = logging.FileHandler('my_log.log')

4. StreamHandler()将日志输出到控制台

python 复制代码
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)

5. 其他性质

  • propagate: 是否将日志消息传递给上级日志记录器
python 复制代码
logger.propagate = False

6. 代码示例

在Geo Transformer代码中, 对logging库中要使用的一些功能, 封装成了一个Logger类, 详情如下:

python 复制代码
import logging

import coloredlogs


def create_logger(log_file=None):
    logger = logging.getLogger()
    logger.handlers.clear()
    logger.setLevel(level=logging.DEBUG)
    logger.propagate = False

    format_str = '[%(asctime)s] [%(levelname).4s] %(message)s'

    stream_handler = logging.StreamHandler()
    colored_formatter = coloredlogs.ColoredFormatter(format_str)
    stream_handler.setFormatter(colored_formatter)
    logger.addHandler(stream_handler)

    if log_file is not None:
        file_handler = logging.FileHandler(log_file)
        formatter = logging.Formatter(format_str, datefmt='%Y-%m-%d %H:%M:%S')
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)

    return logger


class Logger:
    def __init__(self, log_file=None, local_rank=-1):
        if local_rank == 0 or local_rank == -1:
            self.logger = create_logger(log_file=log_file)
        else:
            self.logger = None

    def debug(self, message):
        if self.logger is not None:
            self.logger.debug(message)

    def info(self, message):
        if self.logger is not None:
            self.logger.info(message)

    def warning(self, message):
        if self.logger is not None:
            self.logger.warning(message)

    def error(self, message):
        if self.logger is not None:
            self.logger.error(message)

    def critical(self, message):
        if self.logger is not None:
            self.logger.critical(message)
相关推荐
老师好,我是刘同学1 小时前
Python执行命令并保存输出到文件
python
啵啵鱼爱吃小猫咪3 小时前
机械臂阻抗控制github项目-mujoco仿真
开发语言·人工智能·python·机器人
MaximusCoder3 小时前
等保测评命令——Centos Linux
linux·运维·经验分享·python·安全·centos
yunyun321233 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
放下华子我只抽RuiKe53 小时前
算法的试金石:模型训练、评估与调优的艺术
人工智能·深度学习·算法·机器学习·自然语言处理·数据挖掘·线性回归
m0_662577973 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
songyuc4 小时前
【PyTorch】感觉`CrossEntropyLoss`和`BCELoss`很类似,为什么它们接收labels的shape常常不一样呢?
人工智能·pytorch·python
ℳ๓₯㎕.空城旧梦4 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
浩子智控5 小时前
python程序打包的文件地址处理
开发语言·python·pyqt
Jackey_Song_Odd5 小时前
Part 1:Python语言核心 - 序列与容器
开发语言·windows·python