返回顶部
首页 > 资讯 > 精选 >Pytorch中怎么使用TensorBoard
  • 144
分享到

Pytorch中怎么使用TensorBoard

2023-07-02 13:07:53 144人浏览 安东尼
摘要

本文小编为大家详细介绍“PyTorch中怎么使用TensorBoard”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pytorch中怎么使用TensorBoard”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一

本文小编为大家详细介绍“PyTorch中怎么使用TensorBoard”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pytorch中怎么使用TensorBoard”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、 Introduction to TensorBoard

在炼丹的时候,经常需要追踪模型在训练过程中性能的变化,例如:Regression任务中的MSE、分类任务中的准确率、生成(图片)任务中图片的生成质量、此外还有合成语音的质量……

大体上来说,所有需要追踪的数据包括:标量(Scalar)、图像(image)、统计图(diagram)、视频(video)、音频(audio)、文本(text)、Embedding等等

除了有大量的数据需要追踪外,我们还需要很好的把这些数据显示出来,即数据的写入和显示(读取)要有异步IO,有的时候服务器在学校的机房托管,因此还需要能够通过内网提供可视化……

因此,在种种需求之下,使用一个网页程序来帮助我们进行数据的追踪就成了一个很好的解决方案。具体来说,网页程序实现了前后端的分离,后端只需要专注于数据的记录,而前端专注于数据的显示。此外,网页程序可以进一步扩展,提供网络服务。

因此,就有了TensorBoard这个网页程序实现了我们上面的需求。TensorBoard最早是Tensorflow中的模块,不过现在经过Pytorch团队的努力,TensorBoard已经集成到了Pytorch中。

Pytorch中怎么使用TensorBoard

TensorBoard的教程主要分为两部分,一部分是如何使用TensorBoard(即在训练过程中添加数据,然后在浏览器中监视训练的这整个pipeline)的教程,另外一部分是TensorBoard如何添加不同种类数据(即TensorBoard的api)的教程

二、TensoBoard Pipeline

上面说道,TensorBoard是分为前段显示和后端数据记录的,因此其Pipeline也分为两步:

第一步:后端数据记录第二步:前段查看数据

三、后端数据记录

类似于flaskDjango中把后端程序(服务器)被抽象为了一个类,然而这个类中提供了方法来开启和关闭服务,TensorBoard中也是把后端服务器抽象成了一个类:SummaryWriter,不过不同的是,TensorBoard中的SummaryWriter类在被声明后就开启了对应的服务,直到我们使用了SummaryWriter关闭服务的API。

此外,还有一个不同的之处在于,TensorBoard的前段数据显示和后端数据记录是异步I/O的,即后端程序(SummaryWriter类的实例)将数据写入到一个文件中,而前端程序读取文件中的数据来进行显示。因此后端所谓的服务指的就是数据的记录,而非提供前端的显示。数据记录的实现方式即通过SummaryWriter类中的方法

然后在开启了后端程序的服务器之后,我们就可以通过各种API来添加数据了

导入包:

我们首先导入包

import torchfrom torch.utils.tensorboard import SummaryWriter

1. SummaryWriter类

SummaryWriter声明之后就会开启后端数据记录的服务,因此在实例化该类的时候我们就需要保存数据的位置。声明保存数据的位置有好几种方式

SummaryWriter的签名如下:

class torch.utils.tensorboard.writer.SummaryWriter(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix='')

其中:

  • log_dir (str):指定了数据保存的文件夹的位置,如果该文件夹不存在则会创建一个出来。如果没有指定的话,默认的保存的文件夹是./runs/现在的时间_主机名,例如:Feb04_22-42-47_Alienware,因此每次运行之后都会创建一个新的文件夹。在写论文的时候我们会涉及一系列实验,从不同的角度来说明一些问题,例如我们的假设是否正确、模型性能是否更好……因此最好不要用默认的实现来直接作为存放数据的文件夹,而是使用具有含义的二级结构,例如:runs/exp1。这样的话,所有的实验1的数据都在这个文件夹下,这样我们就可以方便的进行比较。

  • comment (string):给默认的log_dir添加的后缀,如果我们已经指定了log_dir具体的值,那么这个参数就不会有任何的效果

  • purge_step (int):TensorBoard在记录数据的时候有可能会崩溃,例如在某一个epoch中,进行到第 T + X T+X T+X个step的时候由于各种原因(内存溢出)导致崩溃,那么当服务重启之后,就会从 T T T个step重新开始将数据写入文件,而中间的 X X X,即purge_step指定的step内的数据都被被丢弃。

  • max_queue (int):在记录数据的时候,在内存中开的队列的长度,当队列慢了之后就会把数据写入磁盘(文件)中。

  • flush_secs (int):以秒为单位的写入磁盘的间隔,默认是120秒,即两分钟。

  • filename_suffix (string):添加到log_dir中每个文件的后缀。更多文件名称设置要参考tensorboard.summary.writer.event_file_writer.EventFileWriter类。

因此,一个成熟的数据记录方式就是在runs文件夹下按照一定的意义来划分二级文件夹,例如网络结构1网络结构2实验1实验2等等。

2. 添加数据

想后端服务程序添加数据使用的是SummaryWriter类中的一系列方法,这些方法都以add_开头,例如:add_scalaradd_scalarsadd_image……具体来说,所有的方法有:

import pprintpprint.pprint([i for i in SummaryWriter.__dict__.keys() if i.startwith("add_")])

add_hparams,add_scalar,add_scalars,add_histogram,add_histogram_raw,add_image,add_images,add_image_with_boxes,add_figure,add_video,add_audio,add_text,add_onnx_graph,add_graph,add_embedding,add_pr_curve,add_pr_curve_raw,add_custom_scalars_multilinechart,add_custom_scalars_marginchart,add_custom_scalars,add_mesh

后面在第二部分会详细的讲解每个方法,这里先讲共性。

Pytorch中怎么使用TensorBoard

每个方法根据需要添加的数据的不同,方法中具体的参数也不同,但是所有的方法终归都是要添加数据的,因此会存在相同的参数。具体来说,相同的参数包括:

  • tag (str):用于给数据进行分类的标签,标签中可以包含父级和子级标签。例如给训练的loss以loss/train的tag,而给验证以loss/val的tag,这样的话,最终的效果就是训练的loss和验证的loss都被分到了loss这个父级标签下。而trainval则是具体用于区分两个参数的标识符(identifier)。例如我们现在有两个tag,cos/densecos/sparse,那么最终展示下来的效果是这样的。此外,只支持二级标签

Pytorch中怎么使用TensorBoard

  • globa_step (int):首先,每个epoch中我们都会更新固定的step。因此,在一个数据被加入的时候,有两种step,第一种step是数据被加入时当前epoch已经进行了多少个step,第二种step是数据被加入时候,累计(包括之前的epoch)已经进行了多少个step。而考虑到我们在绘图的时候往往是需要观察所有的step下的数据的变化,因此global_step指的就是当前数据被加入的时候已经计算了多少个step。计算global_step的步骤很简单,就是 g l o b a l _ s t e p = e p o c h ∗ l e n ( d a t a l o a d e r ) + c u r r e n t _ s t e p global\_step=epoch * len(dataloader) + current\_step global_step=epoch∗len(dataloader)+current_step

  • wlltime (int):从SummaryWriter实例化开始到当前数据被加入时候所经历时间(以秒计算),默认是使用time.time()来自动计算的,当然我们也可以指定这个参数来进行修改。这个参数一般不改

以添加标量(add_scalar)为例,演示一下添加数据的方法的用法。其他的方法第二部分会讲

writer = SummaryWriter()for epoch in range(n_epoch := 10):    for step in range(total_step := 100):        # 训练代码读取数据来进行显示。        # ...        # ...        # 计算 loss        loss = np.sin(step * 0.01)        # 添加标量        writer.add_scalar(tag="loss/train", scalar_value=loss,                          global_step=epoch * total_step + step)

然后可以看到的效果如下:

Pytorch中怎么使用TensorBoard

3. 关闭SummaryWriter

我们刚才说过,SummaryWriter这样的后端程序在被实例化出来就自动开启了数据记录的服务,而我们在完成了所有的数据记录只有,需要关闭服务。

关闭服务很简单,就是直接调用close方法即可

writer.close()

4. Summary

最终,总结一下整个后端数据记录的流程,其实就三步:

实例化SummaryWriter类,同时指定数据保存的文件夹利用SummaryWriter类提供的方法,添加不同类型的的数据关闭SummaryWriter类,中止服务

四、前端显示数据

因为TensorBoard是异步I/O的网页服务程序,因此后端程序在把数据写入到文件的时候,前端程序可以读取数据来进行显示。

具体来说,后端数据记录程序会把所有的数据记录到同一个文件夹下的多个文件内,以方便前端显示程序多线程加速读取。因此,前端显示程序在启动的时候需要指定读取的文件夹

1. 默认使用

前端显示程序提供了CLI(命令行)界面,因此我们直接在命令行启动就行了

tensorboard --logdir=数据文件夹

其中数据文件夹就是在声明SummaryWriter时候指定的文件夹。

例如:

tensorboard --logdir=./Feb05_01-00-48_Alienware/

而在我们启动前端显示程序之后,就会得到一个端口,访问这个端口就能看到显示的效果

Pytorch中怎么使用TensorBoard

访问该端口就能看到程序:

Pytorch中怎么使用TensorBoard

2. 修改端口

有的时候,在服务器上训练模型的时候为了避免和别人的TensorBoard的端口撞了,我们需要指定新的端口。或者有的时候我们在Docker容器里跑TensorBoard,我们通过一个端口映射到主机上去,这个时候就需要指定TensorBoard使用特定的端口。

具体来说就是通过CLI的--port参数

tensorboard --logdir=数据文件夹 --port=端口

例如我们现在指定上面的例子端口为10000

tensorboard --logdir=./Feb05_01-00-48_Alienware/ --port=10000

Pytorch中怎么使用TensorBoard

五、Summary

最后,总结一下使用TensorFlow的Pipeline,首先在训练的过程中使用SummaryWriter来记录数据,记录的过程中需要注意文件夹需要来合理的划分。

然后我们在前端查看的时候,运行tensorboard的CLI程序即可,一般用的最多的就是--log_dir--port两个参数。

此外,如果是服务器上的话,那么tensorboard的CLI运行在服务器上,然后在自己的电脑上,利用浏览器,通过内网来查看训练过程。

1. SummaryWriter APIs

上面讲完了SummaryWriter的Workflow/Pipeline,剩下的就是SummaryWriter添加数据的API的讲解了。关于这些API的话,正如上面介绍的,他们都以add_开头,具体有:

标量类:add_scalaradd_scalarsadd_custom_scalarsadd_custom_scalars_marginchartadd_custom_scalars_multilinechart

数据显示类:

  • 图像:add_imageadd_imagesadd_image_with_boxesadd_figure

  • 视频:add_video

  • 音频:add_audio

  • 文本:add_text

  • Embedding:add_embedding

  • 点云:add_mesh

统计图:add_histogramadd_histogram_rawadd_pr_curve、add_pr_curve_raw

网络图:add_onnx_graphadd_graph

超参数图:add_hparams

读到这里,这篇“Pytorch中怎么使用TensorBoard”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Pytorch中怎么使用TensorBoard

本文链接: https://lsjlt.com/news/342440.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Pytorch中怎么使用TensorBoard
    本文小编为大家详细介绍“Pytorch中怎么使用TensorBoard”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pytorch中怎么使用TensorBoard”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-07-02
  • Pytorch中使用TensorBoard详情
    目录前言一、 Introduction to TensorBoard二、TensoBoard Pipeline三、后端数据记录1. SummaryWriter类2. 添加数据3. 关...
    99+
    2024-04-02
  • TensorBoard快速入门(Pytorch使用TensorBoard)
    文章目录 TensorBoard 简介TensorBoard 界面介绍TensorBoard 安装TensorBoard 运行Pytorch 使用 TensorBoardGoogle Cola...
    99+
    2023-09-03
    pytorch 深度学习 python
  • 在Pytorch中简单使用tensorboard
    一、tensorboard的简要介绍 TensorBoard是一个独立的包(不是pytorch中的),这个包的作用就是可视化您模型中的各种参数和结果。 下面是安装: pip ...
    99+
    2024-04-02
  • Pytorch中的Tensorboard与Transforms怎么搭配使用
    这篇文章主要介绍了Pytorch中的Tensorboard与Transforms怎么搭配使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。直接上代码:from PI...
    99+
    2023-06-22
  • Pytorch中TensorBoard及torchsummary的使用详解
    1.TensorBoard神经网络可视化工具 TensorBoard是一个强大的可视化工具,在pytorch中有两种调用方法: 1.from tensorboardX import...
    99+
    2024-04-02
  • 教你如何在Pytorch中使用TensorBoard
    什么是TensorboardX Tensorboard 是 TensorFlow 的一个附加工具,可以记录训练过程的数字、图像等内容,以方便研究人员观察神经网络训练过程。可是对于 ...
    99+
    2024-04-02
  • Pytorch中TensorBoard及torchsummary的使用方法
    这篇文章将为大家详细讲解有关Pytorch中TensorBoard及torchsummary的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.TensorBoard神经网络可视化工具Tensor...
    99+
    2023-06-15
  • Pytorch中的Tensorboard与Transforms搭配使用
    这章是结合之前学习的Tensforboard与Transforms的一个练习。 直接上代码: from PIL import Image from torch.utils.tens...
    99+
    2024-04-02
  • Pytorch怎么用Tensorboard来观察数据
    这篇文章主要介绍了Pytorch怎么用Tensorboard来观察数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.Tensorboard有两个常用的方法:一个是add_...
    99+
    2023-06-22
  • python神经网络Pytorch中Tensorboard函数使用
    目录所需库的安装常用函数功能1、SummaryWriter()2、writer.add_graph()3、writer.add_scalar()4、tensorboard --log...
    99+
    2024-04-02
  • pytorch下tensorboard的使用程序示例
    目录一、tensorboard程序实例:1.代码2.在命令提示符中操作3.在浏览器中打开网址4.效果二、writer.add_scalar()与writer.add_scalars(...
    99+
    2024-04-02
  • PyTorch可视化工具TensorBoard和Visdom怎么用
    今天小编给大家分享一下PyTorch可视化工具TensorBoard和Visdom怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-06-26
  • Pytorch用Tensorboard来观察数据
    目录1.Tensorboard1.使用add_scalar()输入代码2.使用add_image()输入代码上一章讲数据的处理,这一章讲数据处理之后呈现的结果,即你有可能看到Loss...
    99+
    2024-04-02
  • Python中Pytorch怎么使用
    这篇文章将为大家详细讲解有关Python中Pytorch怎么使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、TensorTensor(张量是一个统称,其中包括很多类型):0阶张量:标量、常数、0-D...
    99+
    2023-06-15
  • pytorch中nn.Dropout怎么使用
    小编给大家分享一下pytorch中nn.Dropout怎么使用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!看代码吧~Class USeDropout(nn.Module):   &...
    99+
    2023-06-15
  • pytorch中[..., 0]怎么使用
    这篇文章将为大家详细讲解有关pytorch中[..., 0]怎么使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在看程序的时候看到了x[…, 0]的语句不是很理解,后来自己做实验略微了解,以此记录方便自...
    99+
    2023-06-15
  • PyTorch中torch.utils.data.DataLoader怎么使用
    这篇文章主要介绍“PyTorch中torch.utils.data.DataLoader怎么使用”,在日常操作中,相信很多人在PyTorch中torch.utils.data.DataLoader怎么使用问题上存在疑惑,小编查阅了各式资料,...
    99+
    2023-07-02
  • pytorch中nn.RNN()怎么使用
    这篇文章主要介绍“pytorch中nn.RNN()怎么使用”,在日常操作中,相信很多人在pytorch中nn.RNN()怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pytorch中nn.RNN()怎...
    99+
    2023-07-04
  • pytorch中with torch.no_grad()怎么使用
    本篇内容主要讲解“pytorch中with torch.no_grad()怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“pytorch中with torch.no_g...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作