torch.utils.tensorboard使用记录
初始化
torch.utils.tensorboard.writer.SummaryWriter(log_dir=None, comment=‘’, purge_step=None, max_queue=10, flush_secs=120, filename_suffix=‘’)
- init(log_dir=None, comment=‘’, purge_step=None, max_queue=10, flush_secs=120, filename_suffix=‘’)
- log_dir(str)–文件保存路径;使用默认进行项目记录时,生成的路径名为runs/CurrentDatetime+HOSRTNAME(当前时间+设备名称),在每次run时都会自动改变。使用分层的文件夹可以较好的记录不同实现,如指定runs/exp1,runs/exp2,这两个目录可以很好的把不同实验分开
- comment(str)–如果没有指定log_dir,其会作为后缀附加到默认路径名后面,如果指定了log_dir,其会失效
- purge_step(int)–TensorBoard在记录数据的时候有可能会崩溃,例如在某一个epoch中,进行到第T + X个step的时候由于各种原因(内存溢出)导致崩溃,那么当服务重启之后,就会从T 个step重新开始将数据写入文件,而中间的X,即purge_step指定的step内的数据都被丢弃
- max_queue(int)–在记录数据的时候,在内存中开的队列的长度,当队列慢了之后就会把数据写入磁盘(文件)中
- flush_secs(int)–以秒为单位的写入磁盘的间隔,默认是120秒,即两分钟
- filename_suffix(str)–添加到log_dir中每个文件的后缀。更多文件名称设置要参考tensorboard.summary.writer.event_file_writer.EventFileWriter类
代码案例:
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") # 相当于把前面说的runs替换为指定的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/
SummaryWriter常用的几种功能方法
记录标量/添加标量
add_scalar(tag, scalar_value, global_step=None, walltime=None, new_style=False, double_precision=False)
- tag(str)–用于给数据进行分类的标签,标签中可以包含父级和子级标签。例如给训练的loss以loss/train的tag,而给验证以loss/val的tag,这样的话,最终的效果就是训练的loss和验证的loss都被分到loss这个父级标签下。而train和val则是具体用于区分两个参数的标识符(identifier)。此外,只支持到二级标签
- scalar_value(float or string/blobname)–需要记录或保存的参数值/标量
- global_step(int)–首先,每个epoch中我们都会更新固定的step。因此,在一个数据被加入的时候,有两种step,第一种step是数据被加入时当前epoch已经进行了多少个step,第二种step是数据被加入时候,累计(包括之前的epoch)已经进行了多少个step。而考虑到我们在绘图的时候往往是需要观察所有的step下的数据的变化,因此global_step指的就是当前数据被加入的时候已经计算了多少个step。计算global_step的步骤很简单,就是global_step = epoch ∗ len(dataloader) + current_step
- new_style(boolean)–是使用新样式(张量字段)还是旧样式(simple_value 字段)。新样式可能会导致更快的数据加载
代码案例:
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
x = range(100)
for i in x:
writer.add_scalar('y=2x', i * 2, i) # 此处的i就时global_step
writer.close() # 关闭
一次记录多种标签/标量值
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)
- mian_tag(string)–所有要记录的标签的父名称
- tag_scalar_dict(dict)–多个表情名和对应的值组成的标量字典,key是记录的表明的名称,value是对应标量每个step的值
- global_step(int)–如上述
- walltime(float)–从SummaryWriter实例化开始到当前数据被加入时候所经历时间(以秒计算),默认是使用time.time()来自动计算的,当然我们也可以指定这个参数来进行修改。这个参数一般不改
代码案例:

本文详细介绍了如何使用PyTorch的TensorBoard进行模型训练的可视化,包括初始化SummaryWriter、记录标量、添加图片、文本、模型结构和PR曲线等操作。通过TensorBoard,可以直观地观察模型的训练过程和性能指标,便于理解和优化模型。
最低0.47元/天 解锁文章
9471

被折叠的 条评论
为什么被折叠?



