Python logging日志添加与Tensorboard

560 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

写在前面

进行深度学习时,需要记录一些数据指标。常用的是tensorboard,但是在学习被终止时,下次接着训练,就会产生一个新的文件,不会在上个文件接着存储。那么此时可以用一个txt文件把训练的日志保存。该文章主要介绍如何使用logging产生txt日志和使用tensorboard产生日志

1. logging日志记录

代码

import logging

class mylog():
    def __init__(self,filename="WDNet",path="../checkpoints"):
        logger = logging.getLogger(filename)
        logger.setLevel(logging.INFO)
        formatter = logging.Formatter("")
        run_log = logging.FileHandler("{}/logs.txt".format(path),"a",encoding="utf-8")
        run_log.setLevel(logging.INFO)
        run_log.setFormatter(formatter)
        logger.addHandler(run_log)
        self.logger = logger

if __name__ == '__main__':
    log = mylog(filename="WDNet",path="../checkpoints")
    for i in range(10):
        log.logger.info("123")

效果

image.png 生成了log.txt日志

  • 这里设置的日志等级为INFO等级,日志等级排序DEBUG>INFO>WARNNING>ERROR>CRITICAL,因为该项目主要记录一些指标信息,所以只设置为INFO即可。

  • logging.Formatter("")这里可以填入格式化信息,比如

formatter = logging.Formatter("时间:%(asctime)s - 日志等级:%(levelname)s - 日志信息:%(message)s")

就可以格式化得到这样的信息。

image.png

注意在传入路径的时候要注意

image.png

image.png 之前root这个地方写为“..”,在调用函数进行训练时候,一直没有保存。最后发现,这里应该是“.”,因为我的train文件和checkpoints文件夹在通一个父目录下,隶属同一级,所以关系是“.”

2. Tensorboard日志记录

Tensorboard可以让传入数据,然后自动的可视化出来,很方便。

代码

from tensorboardX import SummaryWriter
import os


class logWriter(object):
    def __init__(self, logdir="checkpoints/logs"):
        """Tensorboard日志记录
        :param logdir: 日志保存文件夹
        """
        super().__init__()
        if not os.path.exists(logdir):
            os.makedirs(logdir)
        self.writer = SummaryWriter(logdir)

    def record(self, loss_item: dict, step: int):
        """
        :param loss_item: 损失包装的字典
        :param step: 训练的步数
        """
        for key,value in loss_item.items():
            self.writer.add_scalar(tag=key,scalar_value=value,global_step=step)

这样可以方便我们以字典的形式传入

self.writer = logWriter(logdir)
self.writer.record(
    loss_item={
        "train/G-Loss": G_loss.item(),
        "train/D-Loss": D_loss.item(),
        "train/Watermark-Loss": w_loss.item(),
        "train/Alpha-Loss": alpha_loss.item(),
        "train/Mask-Loss": mask_loss.item(),
        "train/I-watermark-Loss-Stage1": I_watermark_loss.item(),
        "train/I-watermark-Loss-Stage2": I_watermark2_loss.item(),
        "train/Vgg-Loss": vgg_loss.item()
    }, step=self.global_step
)

在使用的时候,需要再命令行输入

1. 打开命令行或者终端
2. activate 你的环境 (linux环境下,要source activate 你的环境)
3. tensorboard --logdir=你的日志生成的目录(具体到目录即可,无需加入日志的名称)

效果

image.png

image.png 这里可以直接将指标可视化出来。