目录
- 什么是TensorboardX
- 配置TensorboardX
-
- 环境要求
- 安装
-
- 使用 pip 安装
- 从源码安装
- 使用TensorboardX
-
- 使用各种 add 方法记录数据
-
- 数字 (scalar)
- 图片 (image)
- 直方图 (histogram)
- 运行图 (graph)
- 嵌入向量 (embedding)
- 其他
- 一些tips
什么是TensorboardX
Tensorboard 是 TensorFlow 的一个附加工具,可以记录训练过程的数字、图像等内容,以方便研究人员观察神经网络训练过程。可是对于 PyTorch 等其他神经网络训练框架并没有功能像 Tensorboard 一样全面的类似工具,一些已有的工具功能有限或使用起来比较困难 (tensorboard_logger, visdom等) 。TensorboardX 这个工具使得 TensorFlow 外的其他神经网络框架也可以使用到 Tensorboard 的便捷功能。TensorboardX 的 github仓库在这里。
TensorboardX 的文档相对详细,但大部分缺少相应的示例。本文是对TensorboardX 各项功能的完整介绍,每项都包含了示例,给出了可视化效果,希望可以方便大家的使用。笔者水平有限,还请读者们斧正,相关问题可以在留言区提出,我尽量解答。
配置TensorboardX
环境要求
- 操作系统:MacOS / Ubuntu (Windows未测试)
- Python2/3
- PyTorch >= 1.0.0 && torchvision >= 0.2.1 && tensorboard >= 1.12.0 1
以上版本要求你对应[email protected]版本。为保证版本时效性,建议大家按照 TensorboardX github仓库中README 的要求进行环境配置。
安装
可以直接使用 pip 进行安装,或者从源码进行安装。
使用 pip 安装
pip install tensorboardX
从源码安装
git clone https://github.com/lanpa/tensorboardX && cd tensorboardX && python setup.py install
使用TensorboardX
首先,需要创建一个 SummaryWriter 的示例:
from tensorboardX import SummaryWriter
# Creates writer1 object.
# The log will be saved in ‘runs/exp’
writer1 = SummaryWriter(‘runs/exp’)
# Creates writer2 object with auto generated file name
# The log directory will be something like ‘runs/Aug20-17-20-33’
writer2 = SummaryWriter()
# Creates writer3 object with auto generated file name, the comment will be appended to the filename.
# The log directory will be something like ‘runs/Aug20-17-20-33-resnet’
writer3 = SummaryWriter(comment=‘resnet’)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
以上展示了三种初始化 SummaryWriter 的方法:
- 提供一个路径,将使用该路径来保存日志
- 无参数,默认将使用
runs/日期时间
路径来保存日志 - 提供一个 comment 参数,将使用
runs/日期时间-comment
路径来保存日志
一般来讲,我们对于每次实验新建一个路径不同的 SummaryWriter,也叫一个 run,如 runs/exp1
、runs/exp2
。
接下来,我们就可以调用 SummaryWriter 实例的各种 add_something
方法向日志中写入不同类型的数据了。想要在浏览器中查看可视化这些数据,只要在命令行中开启 tensorboard 即可:
tensorboard --logdir=
其中的
既可以是单个 run 的路径,如上面 writer1 生成的 runs/exp
;也可以是多个 run 的父目录,如 runs/
下面可能会有很多的子文件夹,每个文件夹都代表了一次实验,我们令 --logdir=runs/
就可以在 tensorboard 可视化界面中方便地横向比较 runs/
下不同次实验所得数据的差异。
使用各种 add 方法记录数据
下面详细介绍 SummaryWriter 实例的各种数据记录方法,并提供相应的示例供参考。
数字 (scalar)
使用 add_scalar
方法来记录数字常量。
add_scalar(tag, scalar_value, global_step=None, walltime=None)
- 1
- 2
参数
- tag (string): 数据名称,不同名称的数据使用不同曲线展示
- scalar_value (float): 数字常量值
- global_step (int, optional): 训练的 step
- walltime (float, optional): 记录发生的时间,默认为
time.time()
需要注意,这里的 scalar_value
一定是 float 类型,如果是 PyTorch scalar tensor,则需要调用 .item()
方法获取其数值。我们一般会使用 add_scalar
方法来记录训练过程的 loss、accuracy、learning rate 等数值的变化,直观地监控训练过程。
Example
from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/scalar_example')
for i in range(10):
writer.add_scalar('quadratic', i**2, global_step=i)
writer.add_scalar('exponential', 2**i, global_step=i)
- 1
- 2
- 3
- 4
- 5
这里,我们在一个路径为 runs/scalar_example
的 run 中分别写入了二次函数数据 quadratic
和指数函数数据 exponential
,在浏览器可视化界面中效果如下:
writer = SummaryWriter('runs/another_scalar_example')
for i in range(10):
writer.add_scalar('quadratic', i**3, global_step=i)
writer.add_scalar('exponential', 3**i, global_step=i)
- 1
- 2
- 3
- 4
接下来我们在另一个路径为 runs/another_scalar_example
的 run 中写入名称相同但参数不同的二次函数和指数函数数据,可视化效果如下。我们发现相同名称的量值被放在了同一张图表中展示,方便进行对比观察。同时,我们还可以在屏幕左侧的 runs 栏选择要查看哪些 run 的数据。
图片 (image)
使用 add_image
方法来记录单个图像数据。注意,该方法需要 pillow
库的支持。
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
- 1
- 2
参数
- tag (string): 数据名称
- img_tensor (torch.Tensor / numpy.array): 图像数据
- global_step (int, optional): 训练的 step
- walltime (float, optional): 记录发生的时间,默认为
time.time()
- dataformats (string, optional): 图像数据的格式,默认为
'CHW'
,即Channel x Height x Width
,还可以是'CHW'
、'HWC'
或'HW'
等
我们一般会使用 add_image
来实时观察生成式模型的生成效果,或者可视化分割、目标检测的结果,帮助调试模型。
Example
from tensorboardX import SummaryWriter
import cv2 as cv
writer = SummaryWriter(‘runs/image_example’)
for i in range(1, 6):
writer.add_image(‘countdown’,
cv.cvtColor(cv.imread(’{}.jpg’.format(i)), cv.COLOR_BGR2RGB),
global_step=i,
dataformats=‘HWC’)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
这里我在 优一酷云字酷(朋友做的小工具,大家如果觉得文章有帮助也可以去多多支持一下)上做了几张带有数字的图片,分别使用 add_image
写入记录。这里我们使用 opencv 读入图片,opencv 读入的图片通道排列是 BGR,因此需要先转成 RGB 以保证颜色正确,并且 dataformats
设为 'HWC'
,而非默认的 'CHW'
。调用这个方法一定要保证数据的格式正确,像 PyTorch Tensor 的格式就是默认的 'CHW'
。效果如下,可以拖动滑动条来查看不同 global_step
下的图片:
add_image
方法只能一次插入一张图片。如果要一次性插入多张图片,有两种方法:
- 使用
torchvision
中的make_grid
方法 [官方文档] 将多张图片拼合成一张图片后,再调用add_image
方法。 - 使用
SummaryWriter
的add_images
方法 [官方文档],参数和add_image
类似,在此不再另行介绍。
直方图 (histogram)
使用 add_histogram
方法来记录一组数据的直方图。
add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)
- 1
- 2
参数
- tag (string): 数据名称
- values (torch.Tensor, numpy.array, or string/blobname): 用来构建直方图的数据
- global_step (int, optional): 训练的 step
- bins (string, optional): 取值有 ‘tensorflow’、‘auto’、‘fd’ 等, 该参数决定了分桶的方式,详见这里。
- walltime (float, optional): 记录发生的时间,默认为
time.time()
- max_bins (int, optional): 最大分桶数
我们可以通过观察数据、训练参数、特征的直方图,了解到它们大致的分布情况,辅助神经网络的训练过程。
Example
from tensorboardX import SummaryWriter
import numpy as np
writer = SummaryWriter(‘runs/embedding_example’)
writer.add_histogram(‘normal_centered’, np.random.normal(0, 1, 1000), global_step=1)
writer.add_histogram(‘normal_centered’, np.random.normal(0, 2, 1000), global_step=50)
writer.add_histogram(‘normal_centered’, np.random.normal(0, 3, 1000), global_step=100)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
我们使用 numpy
从不同方差的正态分布中进行采样。打开浏览器可视化界面后,我们会发现多出了"DISTRIBUTIONS"和"HISTOGRAMS"两栏,它们都是用来观察数据分布的。其中在"HISTOGRAMS"中,同一数据不同 step 时候的直方图可以上下错位排布 (OFFSET) 也可重叠排布 (OVERLAY)。上下两图分别为"DISTRIBUTIONS"界面和"HISTOGRAMS"界面。
运行图 (graph)
使用 add_graph
方法来可视化一个神经网络。
add_graph(model, input_to_model=None, verbose=False, **kwargs)
- 1
- 2
参数
- model (torch.nn.Module): 待可视化的网络模型
- input_to_model (torch.Tensor or list of torch.Tensor, optional): 待输入神经网络的变量或一组变量
该方法可以可视化神经网络模型,TensorboardX 给出了一个官方样例大家可以尝试。样例运行效果如下:
嵌入向量 (embedding)
使用 add_embedding
方法可以在二维或三维空间可视化 embedding 向量。
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)
- 1
- 2
参数
- mat (torch.Tensor or numpy.array): 一个矩阵,每行代表特征空间的一个数据点
- metadata (list or torch.Tensor or numpy.array, optional): 一个一维列表,mat 中每行数据的 label,大小应和 mat 行数相同
- label_img (torch.Tensor, optional): 一个形如 NxCxHxW 的张量,对应 mat 每一行数据显示出的图像,N 应和 mat 行数相同
- global_step (int, optional): 训练的 step
- tag (string, optional): 数据名称,不同名称的数据将分别展示
add_embedding
是一个很实用的方法,不仅可以将高维特征使用PCA、t-SNE等方法降维至二维平面或三维空间显示,还可观察每一个数据点在降维前的特征空间的K近邻情况。下面例子中我们取 MNIST 训练集中的 100 个数据,将图像展成一维向量直接作为 embedding,使用 TensorboardX 可视化出来。
from tensorboardX import SummaryWriter
import torchvision
writer = SummaryWriter(‘runs/embedding_example’)
mnist = torchvision.datasets.MNIST(‘mnist’, download=True)
writer.add_embedding(
mnist.train_data.reshape((-1, 28 * 28))[:100,:],
metadata=mnist.train_labels[:100],
label_img = mnist.train_data[:100,:,:].reshape((-1, 1, 28, 28)).float() / 255,
global_step=0
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
采用 PCA 降维后在三维空间可视化效果如下:
可以发现,虽然还没有做任何特征提取的工作,但 MNIST 的数据已经呈现出聚类的效果,相同数字之间距离更近一些(有没有想到 KNN 分类器)。我们还可以点击左下方的 T-SNE
,用 t-SNE 的方法进行可视化。add_embedding
方法需要注意的几点:
mat
是二维 MxN,metadata
是一维 N,label_img
是四维 NxCxHxW!label_img
记得归一化为 0-1 之间的 float 值
其他
TensorboardX 除了上述的常用方法之外,还有许多其他方法如 add_audio
、add_figure
等,感兴趣的朋友可以参考[官方文档]。相信读了这篇文章过后,你已经能够类比熟练调用其他的方法了。
一些tips
- 如果在进入 embedding 可视化界面时卡住,请更新 tensorboard 至最新版本 (>=1.12.0)。
- tensorboard 有缓存,如果进行了一些 run 文件夹的删除操作,最好重启 tensorboard,以避免无效数据干扰展示效果。
- 如果执行
add
操作后没有实时在网页可视化界面看到效果,试试重启 tensorboard。
截至文章发稿时,对应[email protected]版本。经笔者测试,若PyTorch版本<1.0.0或tensorboard版本<1.12.0,TensorboardX有部分功能无法正常使用,建议大家按照环境要求进行环境的配置或升级。 ↩︎
https://github.com/lutzroeder/Netron
借助这个工具可以像windows的软件一样导入已经训练好的模型加权重即可一键生成
我目前看了下visdom实现pytorch的网络结构查找还是很困难,在stackflow上有很多人使用自己编写的基于matplotlib来实现网络结构可视化适用性也不是很好,后来查找到使…
插入表情
热门文章
- 详解PyTorch项目使用TensorboardX进行训练可视化 70606
- PyQt4入门教程(1)_PyQt介绍及准备工作 40465
- PyQt4入门教程(2)_PyQt4的第一个程序 29857
- PyQt4入门教程(4)_布局管理 14737
- PyQt4入门教程(3)_菜单栏和工具条 13126
分类专栏
- 最佳实践 1篇
- 深度学习 4篇
- 计算机视觉 1篇
- Python 7篇
- PyQt4教程 7篇
- AIOps 1篇
- PyTorch 1篇
最新评论
- 详解PyTorch项目使用TensorboardX进行训练可视化
沐凡星: 在浏览器输入网址:http://localhost:6006.
- PyQt4百行代码自制密码管理器(二):基本功能实现
sunzq55: 啥都不说了,请收下我的膝盖!
- PyQt4百行代码自制密码管理器(一):基本框架搭建
sunzq55: 太实用了,准备一会试试。
- 详解PyTorch项目使用TensorboardX进行训练可视化
xiamixiami1998: 问一个比较基础的问题,请问tensorboardX那个浏览器界面怎么打开,是在cmd命令里边输入吗?
- 详解PyTorch项目使用TensorboardX进行训练可视化
刚好遇见你、: 博主,add_image将 dataformats 设为 'HWC',而非默认的 'CHW'的时候报错TypeError: add_image() got an unexpected keyword argument 'dataformats'该如何解决
最新文章
- zotero+坚果云,免费跨平台文献管理最佳实践指南
- 还在用ImageNet预训练?你的网络可能对形状一无所知!谈神经网络的形状偏见
- 图灵奖得主亲授!深度学习视频课程精选
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎
ImportError: TensorBoard logging requires TensorBoard with Python summary writer installed. This should be available in 1.14 or above.
这是什么原因呢?8 月前回复举报
因为工作需要,改用pytorch。但如何将训练过程可视化成了大问题。听说pytorch代码中可以插入tensorboard代码,第一反应是居然可以这么玩。。
网络上PyTorch中使用tensorboard的方法有很多。但毕竟tensorboard不是PyTorch框架原生自带的,因此大多方法都只能支持部分功能。经过孙大佬的推荐,觉得使用tensorboardX应该是目前已知的最好方法了…
缘由
自己上次安装好PyTorch以及训练了一下官方的数据,今天看到了这个TensorBoard来可视化的用法,感觉不错就尝试玩了一下!自己只是尝试了一下追踪模型训练的过程,其他自己去看官网教程吧!
用法
具体详细说明请参考https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html
简…
https://tensorboardx.readthedocs.io/en/latest/tutorial.html
tensorboardX github地址:
https://github.com/lanpa/tensorboardX
这个东西非常简单,很多网友的博客对初学者不利,加了自己的东西,致…
1.安装
有各种方法,docker安装,使用logger.py脚本调用感觉都不简洁。现在的tensorboardX感觉已经很好了,没什么坑。在命令行pip安装即可
!注意! 这玩意虽然在pytorch下,但是其实是内核是 tensorflow里面的board
之前,我一直用visdom做pytorch可视化,也是非常易用。不过现在跟tensorboard对比,我还是更推荐tensorboard。
visdom相比tensorboard只有一个优点,那就是自动实时刷新。而tensorboard无论从可视化
源码:https://github.com/miaoshuyu/pytorch-tensorboardx-visualization
1 引言
我们都知道tensorflow框架可以使用tensorboard这一高级的可视化的工具,为了使用tensorboard这一套完美的可视化工具,未免可以将其应用…
官方文档(github):https://github.com/lanpa/tensorboardX/blob/master/docs/tutorial.rst
各种应用的综合demo:https://github.com/lanpa/tensorboardX
比较详细的知乎介绍:https://zhuanlan…
vov20.
tensorboard --logdir=path/to/logdir
保存数据
导入模块并创建一个SummaryWriter实例,使用此实例将训练信息保存在logs文件夹下