什么是网站子目录,做服装设计有什么网站可以参考,怎样能有个人网站,西安天气最新公布文章目录 前言3.2 Visdom 前言
在训练神经网络的过程中需要用到很多的工具#xff0c;最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块#xff0c;合理使用这些工具可以极大地提高编程效率。
由于内容较多#xff0c;本文分成了五篇文… 文章目录 前言3.2 Visdom 前言
在训练神经网络的过程中需要用到很多的工具最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块合理使用这些工具可以极大地提高编程效率。
由于内容较多本文分成了五篇文章1数据处理2预训练模型3TensorBoard4Visdom5CUDA与小结。
整体结构如下
1 数据处理 1.1 Dataset1.2 DataLoader 2 预训练模型3 可视化工具3.1 TensorBoard3.2 Visdom4 使用GPU加速CUDA5 小结
全文链接
PyTorch中常用的工具1数据处理PyTorch常用工具2预训练模型PyTorch中常用的工具3TensorBoardPyTorch中常用的工具4VisdomPyTorch中常用的工具5使用GPU加速CUDA
3.2 Visdom
Visdom是Facebook专门为PyTorch开发的一款可视化工具开源于2017年3月。Visdom十分轻量级支持非常丰富的功能可以胜任大多数的科学运算可视化任务它的可视化界面如下图所示。 Visdom可以创造、组织和共享多种数据的可视化包括数值、图像、文本甚至是视频同时支持PyTorch、Torch以及NumPy。用户可以通过编程组织可视化空间或者通过用户接口为数据打造仪表板以此检查实验结果或调试代码。
Visdom中有以下两个重要概念。 env环境。不同环境的可视化结果相互隔离互不影响在使用时如果不指定env则默认使用main。不同用户、不同程序一般使用不同的env。 pane窗格。窗格用于可视化图像、数值或打印文本等它可以拖动、缩放、保存和关闭。一个程序可以使用同一个env中的不同pane每个pane可视化或记录不同信息。
通过命令pip install visdom即可完成Visdom的安装安装完成后通过python -m visdom.server命令启动Visdom服务或者通过nohup python -m visdom.server 命令将服务放至后台运行。Visdom服务是一个Web Server服务默认绑定8097端口客户端与服务器间通过tornado进行非阻塞交互。
使用Visdom时需要注意以下两点。 需要手动指定保存env可在web界面点击save按钮或在程序中调用save方法否则Visdom服务重启后env等信息会丢失。 客户端与服务器之间的交互采用tornado异步框架可视化操作不会阻塞当前程序网络异常也不会导致程序退出。
Visdom以Plotly为基础它支持丰富的可视化操作下面举例说明一些最常用的操作
%%sh
# 启动visdom服务器
nohup python -m visdom.server In: import torch as timport visdom# 新建一个连接客户端# 指定env utest1默认端口为8097host是‘localhostvis visdom.Visdom(envutest1, use_incoming_socketFalse)x t.arange(0, 30, 0.01)y t.sin(x)vis.line(Xx, Yy, winsinx, opts{title: ysin(x)})Out: sinx输出的结果如下图所示。 下面逐一分析这几行代码。 vis visdom.Visdom(envutest1)用于构建一个客户端。客户端除了指定env还可以指定host、port等参数。 vis作为一个客户端对象可以使用以下常见的画图函数。 line类似MATLAB中的plot操作用于记录某些标量的变化如损失、准确率等。image可视化图片可以是输入的图片也可以是程序生成的图片还可以是卷积核的信息。text用于记录日志等文字信息支持HTML格式。histgram可视化分布主要是查看数据、参数的分布。scatter绘制散点图。bar绘制柱状图。pie绘制饼状图。更多操作可以参考Visdom的GitHub主页。
本小节主要介绍深度学习中常见的line、image和text操作。
Visdom同时支持PyTorch的Tensor和NumPy的ndarray两种数据结构但不支持Python的int、float等数据类型因此每次传入数据时需要将数据转成ndarray或Tensor类型。上述操作的参数一般不同但以下两个参数是绝大多数操作都具备的。 win用于指定pane的名字如果不指定那么Visdom将自动分配一个新的pane。如果两次操作指定的win名字一样那么新的操作会覆盖当前pane的内容因此建议每次操作都重新指定win。 opts用来可视化配置接收一个字典常见的option包括title、xlabel、ylabel、width等主要用于设置pane的显示格式。
在训练网络的过程中例如损失函数值、准确率等数值不是一成不变的为了避免覆盖之前pane的内容需要指定参数updateappend。除了使用update参数还可以使用vis.updateTrace方法更新图。updateTrace不仅能在指定pane上新增一个和已有数据相互独立的trace还能像updateappend那样在同一条trace上追加数据下面举例说明
In: # append 追加数据for ii in range(0, 10):# y xx t.Tensor([ii])y xvis.line(Xx, Yy, winpolynomial, updateappend if ii 0 else None)# updateTrace 新增一条线x t.arange(0, 9, 0.1)y (x ** 2) / 9vis.line(Xx, Yy, winpolynomial, namethis is a new Trace, updatenew)Out: polynomial打开浏览器输入http://localhost:8097可以看到如图下图所示的结果。
append和updateTrace可视化效果
image的画图功能可以分为以下两类。
image接收一个二维或三维向量形状为 H × W H\times W H×W黑白图像或 3 × H × W 3 \times H\times W 3×H×W彩色图像。images接收一个四维向量形状为 N × C × H × W N\times C\times H\times W N×C×H×W其中 C C C可以是1或3分别代表黑白和彩色图像。images可以实现类似torchvision中make_grid的功能将多张图片拼接在一起。images也可以接收一个二维或三维的向量此时它所实现的功能与image一致。
In: # 可视化一个随机的黑白图片vis.image(t.randn(64, 64).numpy())# 可视化一张随机的彩色图片vis.image(t.randn(3, 64, 64).numpy(), winrandom2)# 可视化36张随机的彩色图片每一行6张vis.images(t.randn(36, 3, 64, 64).numpy(), nrow6, winrandom3, opts{title:random_imgs})Out: random3images的可视化输出如下图所示。 vis.text用于可视化文本它支持所有的HTML标签同时也遵循着HTML的语法标准。例如换行需使用br标签而\r\n无法实现换行下面举例说明
In: vis.text(uh1Validation/h1br2021-04-18 20:09:00,399 - mmdet - INFO - Epoch(val) [21][160] brbbox_mAP: 0.8180, bbox_mAP_50: 0.9880, bbox_mAP_75: 0.9440, bbox_mAP_s: 0.1510, brbbox_mAP_m: 0.8390, bbox_mAP_l: 0.8040, bbox_mAP_copypaste: 0.818 0.988 0.944 0.151 0.839 0.804,brsegm_mAP: 0.8180, segm_mAP_50: 0.9880, segm_mAP_75: 0.9570, segm_mAP_s: 0.2000, segm_mAP_m: 0.8250,brsegm_mAP_l: 0.8120, segm_mAP_copypaste: 0.818 0.988 0.957 0.200 0.825 0.812,winvisdom,opts{title: uvalidation })Out: visdom本小节主要介绍了深度学习中两种常见的可视化工具TensorBoard和Visdom。合理地利用可视化工具便于记录与观察神经网络的中间层与网络整体的训练效果从而帮助用户更好地对网络进行调整。