Tensorboard + Logger 日志记录

article/2025/9/16 13:33:19

在Pytorch 训练模型的时候,需要日志帮助开发者记录些重要信息和参数,以方便开发者更好的调节模型及参数,常见的日志非 Tensorboard不可,但是Pytorch 对 Tensorboard 的支持不是十分完美,在记录模型重要参数时 Tensorboard 的 writer.add_text() 记录日志不是很方便,Logger 便可替代 Tensorboard 记录文本日志,Tensorboard 专注 模型训练图,两者搭配使用极大提高效率,且讲两者放在 Tensorboard 日志文件夹下,方便调用查看。

  • 【解析】TensorBoard 可视化:https://blog.csdn.net/ViatorSun/article/details/116275485

1、train 文件

#  !/usr/bin/env  python
#  -*- coding:utf-8 -*-
# @Time     : 2022.01
# @Author   : 绿色羽毛
# @Email    : lvseyumao@foxmail.com
# @Blog     : https://blog.csdn.net/ViatorSun
# @version  : "1.0" 
# @Note     : Tensorboard + logger 日志使用import os
import socket
from datetime import datetime
from torch.utils.tensorboard import SummaryWriter""" ********************************* Tensorboard/日志 配置 ********************************* """
current_time = datetime.now().strftime('%b%d_%H-%M-%S')
log_dir = os.path.join('runs', current_time + '_' + args.run_model + '_' + socket.gethostname())writer = SummaryWriter(log_dir)
logger = create_logger(log_dir, current_time + args.log_name)
config_from_args = args.__dict__
total_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad )
logger.info(f"=============================== Modle Arguments ===============================")
logger.info(f">>> Model Name        : {args.model_name, args.run_model}")
logger.info(f">>> Training time     : {current_time}")
logger.info(f">>> Computation with  : {current_time}")
logger.info(f"== Model Total params : %.2f MB \n" % (total_parameters / 1e6))
logger.info(f"== ArgumentParser:{json.dumps(config_from_args, indent=20)}")
logger.info(f"=============================== Train Arguments ===============================")
logger.info(f"== criterion     :{criterion}")
logger.info(f"== optimizer     :{optimizer.__class__}")
logger.info(f"                 :{json.dumps(optimizer.defaults, indent=20)}")logger.info(f"== lr_scheduler  :{lr_scheduler.__class__}")
logger.info(f"                 :{json.dumps(lr_scheduler.state_dict(), indent=20)}")
logger.info(f"==============================================================================")logger.info(f"Creating model:{args.model_name}")
logger.info(model)

生成的日志
在这里插入图片描述


2、创建logger 日志

#  !/usr/bin/env  python
#  -*- coding:utf-8 -*-
# @Time     : 2022.01
# @Author   : 绿色羽毛
# @Email    : lvseyumao@foxmail.com
# @Blog     : https://blog.csdn.net/ViatorSun
# @version  : "1.0" 
# @Note     : Pytorch 文本日志import os
import loggingdef create_logger(log_dir, filename, verbosity=1, name=None):level_dict = {0: logging.DEBUG, 1: logging.INFO, 2: logging.WARNING}formatter  = logging.Formatter( "[%(asctime)s][%(filename)s][line:%(lineno)d][%(levelname)s] %(message)s" )logger     = logging.getLogger(name)logger.setLevel(level_dict[verbosity])# fh = logging.FileHandler(filename, "w")fh = logging.FileHandler(os.path.join(log_dir, filename+'.txt'), mode='a')fh.setFormatter(formatter)logger.addHandler(fh)sh = logging.StreamHandler()sh.setFormatter(formatter)logger.addHandler(sh)return logger

3、Tensorboard 日志

在此截取一部分 Tensorboard 接口代码,可见在没有用户输入 log_dir 时,Tensorboard 会自动创建 runs文件夹,然后以当前时间 current_time + gethostname() + comment 命名Tensorboard日志的文件名,

class SummaryWriter(object):"""Writes entries directly to event files in the log_dir to beconsumed by TensorBoard.The `SummaryWriter` class provides a high-level API to create an event filein a given directory and add summaries and events to it. The class updates thefile contents asynchronously. This allows a training program to call methodsto add data to the file directly from the training loop, without slowing downtraining."""def __init__(self, log_dir=None, comment='', purge_step=None, max_queue=10,flush_secs=120, filename_suffix=''):"""Creates a `SummaryWriter` that will write out events and summariesto the event file.Args:log_dir (string): Save directory location. Default isruns/**CURRENT_DATETIME_HOSTNAME**, which changes after each run.Use hierarchical folder structure to comparebetween runs easily. e.g. pass in 'runs/exp1', 'runs/exp2', etc.for each new experiment to compare across them.comment (string): Comment log_dir suffix appended to the default``log_dir``. If ``log_dir`` is assigned, this argument has no effect.purge_step (int):When logging crashes at step :math:`T+X` and restarts at step :math:`T`,any events whose global_step larger or equal to :math:`T` will bepurged and hidden from TensorBoard.Note that crashed and resumed experiments should have the same ``log_dir``.max_queue (int): Size of the queue for pending events andsummaries before one of the 'add' calls forces a flush to disk.Default is ten items.flush_secs (int): How often, in seconds, to flush thepending events and summaries to disk. Default is every two minutes.filename_suffix (string): Suffix added to all event filenames inthe log_dir directory. More details on filename construction intensorboard.summary.writer.event_file_writer.EventFileWriter.Examples::from torch.utils.tensorboard import SummaryWriter# create a summary writer with automatically generated folder name.writer = SummaryWriter()# folder location: runs/May04_22-14-54_s-MacBook-Pro.local/# create a summary writer using the specified folder name.writer = SummaryWriter("my_experiment")# folder location: my_experiment# create a summary writer with comment appended.writer = SummaryWriter(comment="LR_0.1_BATCH_16")# folder location: runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/"""torch._C._log_api_usage_once("tensorboard.create.summarywriter")if not log_dir:import socketfrom datetime import datetimecurrent_time = datetime.now().strftime('%b%d_%H-%M-%S')log_dir = os.path.join('runs', current_time + '_' + socket.gethostname() + comment)self.log_dir = log_dir

http://chatgpt.dhexx.cn/article/7LBkNl7K.shtml

相关文章

深入理解 rootLogger、logLogger、qtLogger

作者: 一去、二三里个人微信号: iwaleon微信公众号: 高效程序员 在使用 Log4Qt 时,你会发现有一系列的 logger - rootLogger()、logLogger()、qtLogger(),简直傻傻分不清楚! 为什么会有这么多 logger? 各 logger 之间有什么关系? 它们均适用于哪种场景? 参考文档对这部…

logger 报错

logger 报错:(log4j 起不来,log message打不出来) No appenders could be found for logger (com.vip.qa.android.base.DriverFactory). log4j:WARN Please initialize the log4j system properly. 原因: log4j.prop…

java的logger_java.util.logging.Logger 使用详解

概述: 第1部分 创建Logger对象 要使用J2SE的日志功能,首先要取得java.util.logging.Logger实例,这可以通过Logger类的两个静态getLogger()方法来取得: staticLogger getLogger(String name) 查找或创建一个logger。staticLogger getLogger(String name, String resourceBun…

Logger日志使用教程

Java util Logger的使用步骤 Java util Logger是java原生的日志生成工具,不需要另外引用类库,使用方便,学习简单,能够在小型应用中灵活使用。下面从实际应用角度,对Logger的使用步骤作出总结,以实现快速掌握…

Logger 日志管理

转载请注明出处: http://blog.csdn.net/like_program/article/details/52986553 1.Logger 是什么 在我们日常的开发中,肯定是少不了要和 Log 打交道,回想一下我们是怎么使用 Log 的:先定义一个静态常量 TAG,TAG 的值通…

【转】最详细的Log4J使用教程一、入门实例二、Log4J基本使用方法三、Spring中使用Log4J四、实战经验总结

原文地址:http://www.codeceo.com/article/log4j-usage.html 日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j可以免费下载到Log4j最新版本的软…

Logger打印日志

1. 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类声明logger记录日志 下面看一个例子 // 1. 引入slf4j接口的Logger和LoggerFactory import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UserService { // 2. 声明…

rename 批量修改文件名

1.批量修改文件后缀: rename s/// *.nii rename s/\.nii/\.txt/ * #把.nii后缀改为.txt rename s/\.txt// * #把.txt后缀去掉 rename s/$/\.nii/ * #加上后缀.nii rename s//\.nii/ * #这样会把.nii放到文件名前面,导致文件被隐藏。 rename s/^/dm/ * #…

Linux基本功系列之rename命令实战

文章目录 一. rename 命令介绍二. 语法格式及常用选项三. 参考案例3.1 将当前目录下所有.cfg的文件,替换为.txt结尾3.2 将所有出现mufeng的部分都替换为mufeng13.3 将mufeng0开头都变成mufeng00开头3.4 rename支持正则表示式 总结 前言🚀🚀&a…

VS项目rename

Visual Studio c项目更改相关文件名字 项目里面文件夹 Rename 右键 .sln文件, 打开方式–> txt方式打开编辑找到里面project的文件夹名字, Rename. 然后到资源管理器里, 找到对应的folder, Rename. .vcxproj相关文件 Rename 相关文件Rename .sln文件, txt打开–>Ren…

rename 命令 – 批量修改文件名称

rename 命令的功能是用于批量修改文件名称。与 mv 命令一次只能修改一个文件名不同,rename命令能够基于正则表达式对文件名进行批量修改,但要求是把匹配规则准确的描述给系统。 rename 命令的参数有三项:其一是当前文件名中要被修改的字符&am…

linux之rename命令

用字符串替换的方式批量改变文件名 rename 命令存在两个版本用法上有所区别 C语言版本, 支持通配符 [常用通配符说明] ? 表示一个任意字符 * 表示一个或一串任意字符 [charset] 可替代charset集中的任意单个字符Perl版本, 支持正则表达式 [常用正则表达式符号说明] ^…

pandas:案例详解 rename函数 修改列名和行名

pandas:案例详解rename函数 修改列名和索引 rename函数简介0 构建学习数据1 修改索引两种方式2 修改列名两种方式3 是否替换原列表3 pandas 字母转换大小写3 使用axis参数常见问题问题:参数位置错误修改办法: rename函数简介 df.rename(inde…

关于Unity 2020找不到PBR graph的问题,shader graph 10 版本

2020.4以后采用了船新的Shader Graph,变动挺大的。 建议还是换版本或者去官网学习。 PBR是没有了,但是有两个空的Shader 一个是Blank Shader,即空shader,自己进去里面创建PBR(前排提醒,不是简单拖一个PBR nodes&#x…

Substance与PBR工作流总结

关于PBR PBR即基于物理的渲染,是一套尝试基于真实世界光照物理模型的渲染技术合集,使用了一种更符合物理学规律的方式来模拟光线,达到更真实的渲染效果,而且可以直接通过物理参数来直观地达到想要的结果,不用通过拙劣的…

BPR算法

目录 什么是BPR算法 BPR算法简介 显示反馈与隐式反馈 矩阵分解的不足 BPR算法 符号定义 BPR算法解决方式 BPR算法两个基本假设 BPR算法推导 贝叶斯定理 BPR推导 BPR算法流程 BPR算法代码与结果 数据 BPR算法代码 BPR结果展示 什么是BPR算法 BPR算法简介 BPR&…

基于物理的渲染技术(PBR)系列一

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术…

[引擎开发] PBR材质的原理

[本文大纲] 基础概念篇 引入 光线与介质的作用 光线的传播路径 体积散射和表面光照 光线和介质外观 微平面理论 概念介绍 中间向量 能量守恒定律 微平面理论的不足 光照计算 半球积分 …

PBR材质基础概念,限制及未来发展

最近几年图形学社区对PBR的关注非常高,也许是由于Disney以及一些游戏引擎大厂的助推,也许是因为它可以被轻松集成进实时渲染的游戏引擎当中,也许是因为许多人发现现在只需要调几个参数就能实现具有非常精细细节的表面着色了。反正现在网络上随…

PBR渲染(一)——PBR理论基础

PBR基础框架 PBR理论基础PBR基础框架 1.PBR理论基础 BSDF(双向散射表面分布函数) 对于一般的基于物理的表面材质来说,使用第一项BSSRDF双向散射表面反射分布函数,其简化后的重点就是BRDF双向反射率分布函数,忽略了复…