一、介绍

在深度学习领域,模型训练是一个必须的过程,因此常常需要实时监听并可视化一些数据,如损失值loss,正确率acc等。在Tensorflow中,最常使用的工具非Tensorboard莫属;在Pytorch中,也有类似的TensorboardX,但据说其在张量数据加载的效率方面不如visdom。visdom是FaceBook开发的一款可视化工具,其实质是一款在网页端的web服务器,对Pytorch的支持较好。

Visdom中有两个重要概念:

  • env:环境。不同环境的可视化结果相互隔离,互不影响,在使用时如果不指定env,默认使用main。不同用户、不同程序一般使用不同的env。
  • pane:窗格。窗格可用于可视化图像、数值或打印文本等,其可以拖动、缩放、保存和关闭。一个程序中可使用同一个env中的不同pane,每个pane可视化或记录某一信息。

二、如何安装及启动

2.1 安装

安装命令:

pip install visdom

安装成功的界面如下图所示

安装成功后,我们需要将visdom启动。

2.2 启动

类似于TensorFlow的TensorBoard,要使用Visdom,就要先在终端开启监听命令。

vidsom启动命令:

python -m visdom.server

或者通过如下命令

nohup python -m visdom.server &

将服务放至后台运行。

visdom成功启动后,会返回一个网址(如下图)。根据显示的网址然后在浏览器里输入:http://localhost:8097 进行登录。

进入网址后,浏览器会显示visdom的主界面。

python终端会实时显示数据交互过程:

 三、Visdom可视化神经网络训练过程

首先,我们需要导入Visdom及所需的其它库

from visdom import Visdom
import numpy as np
import time

Visdom可视化神经网络的训练过程大致分为3步:

  1. 实例化一个窗口
  2. 初始化窗口的信息
  3. 更新监听的信息

3.1 监听单一数据

示例:监听train_loss的变化

# 实例化一个窗口
wind = Visdom()
# 初始化窗口信息
wind.line([0.],  # Y的第一个点的坐标[0.],  # X的第一个点的坐标win='train_loss',  # 窗口的名称opts=dict(title='train_loss')  # 图像的标例)
# 更新数据
for step in range(10):# 随机获取loss,这里只是模拟实现loss = np.random.randn() * 0.5 + 2wind.line([loss], [step], win='train_loss', update='append')time.sleep(0.5)

运行结果:此时打开visdom的主界面,会发现窗口train_loss已经显示出来了

3.2 监听多条数据

示例:监听train_loss和acc
# 实例化窗口

from visdom import Visdom
import numpy as np
import time# 实例化窗口
wind = Visdom()
# 初始化窗口参数
wind.line([[0., 0.]], [0.], win='train', opts=dict(title='loss&acc', legend=['loss', 'acc']))
# 更新窗口数据
for step in range(10):loss = 0.2 * np.random.randn() + 1acc = 0.1 * np.random.randn() + 0.5wind.line([[loss, acc]], [step], win='train', update='append')time.sleep(0.5)

运行结果

书籍例子:

import torch as t
import visdom# 新建一个连接客户端
# 指定env = u'test1',默认端口为8097,host是‘localhost'
vis = visdom.Visdom(env=u'test1',use_incoming_socket=False)x = t.arange(1, 30, 0.01)
y = t.sin(x)
vis.line(X=x, Y=y, win='sinx', opts={'title': 'y=sin(x)'})

结果输出:

 3.3 可以通过update参数(append/new)控制数据更新

代码:

import time
import cv2
import visdom
import numpy as np
import torch as tvis = visdom.Visdom(env="image test")# append 追加数据
for ii in range(0, 10):# y = xx = t.Tensor([ii])y = xvis.line(X=x, Y=y, win='polynomial', update='append' if ii > 0 else None)# updateTrace 新增一条线
x = t.arange(0, 9, 0.1)
y = (x ** 2) / 9
vis.line(X=x, Y=y, win='polynomial', name='this is a new Trace', update='new')

结果:

下面逐一分析这几行代码:

  • vis = visdom.Visdom(env=u'test1'),用于构建一个客户端,客户端除指定env之外,还可以指定host、port等参数。
  • vis作为一个客户端对象,可以使用常见的画图函数,包括:

    • line:类似Matlab中的plot操作,用于记录某些标量的变化,如损失、准确率等
    • image:可视化图片,可以是输入的图片,也可以是GAN生成的图片,还可以是卷积核的信息
    • 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包括titlexlabelylabelwidth等,主要用于设置pane的显示格式。

四、Visdom可视化图像

1、案例:在处理图像数据时,可以使用visdom对图像进行可视化。

from visdom import Visdom
import cv2
import numpy as np
import torch
import os
# 新建一个连接客户端
# 指定env = u'test1',默认端口为8097,host是‘localhost'
vis = Visdom(env=u'test1',use_incoming_socket=False)# 读入图像
path1 = os.getcwd()print("Current Path: {0}".format(path1))
image = cv2.imread('gudongche-01.jpg')
# # openCV按照BGR读取,而visdom 默认按照RGB显示,因此要进行通道转换
img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# visdom类似于pytorch中的卷积模型,接收的数据都要求通道数在前
img = np.transpose(img, (2, 0, 1))
# 将numpy类型转换为torch类型
img = torch.from_numpy(img)
# 可视化图像
vis.image(img, win='pkq')

运行结果:

 2、其他举例

1)显示图像 (加了可视化配置参数opts)

图像显示底层调用的PIL库。但平时更喜欢用opencv,此处使用cv2,PIL使用更方便不用转换。

import time
import cv2
import visdom
import numpy as npviz = visdom.Visdom(env="image test")img = cv2.imread("gudongche-01.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = np.transpose(img, (2, 0, 1))
# img = img.astype(np.float32) / 255
print(img.shape, img.dtype)
# image demo
viz.image(img,opts={'title': 'Random!', 'caption': 'Click me!'},
)

2)image图像显示与更新窗口显示:(在一个image窗口中不断更新显示图像)

代码:

import time
import cv2
import visdom
import numpy as npviz = visdom.Visdom(env="image test")img = cv2.imread("gudongche-01.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = np.transpose(img, (2, 0, 1))
# img = img.astype(np.float32) / 255
print(img.shape, img.dtype)
# image demo
image = viz.image(np.random.rand(3, 256, 256), opts={'title': 'image1', 'caption': 'How random.'})
for i in range(100):viz.image(np.random.randn(3, 256, 256), win=image)time.sleep(0.5)

结果:

 3)images多个图像显示与更新:(窗口显示生成20个大小为64*64的三通道图)

代码:

import time
import cv2
import visdom
import numpy as npviz = visdom.Visdom(env="image test")img = cv2.imread("gudongche-01.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = np.transpose(img, (2, 0, 1))
# img = img.astype(np.float32) / 255
print(img.shape, img.dtype)
# image demo
images = viz.images(np.random.randn(20, 3, 64, 64),opts=dict(title='Random images', caption='How random.', nrow=5)
)
for i in range(100):# 可视化20张随机的彩色图片,每一行5张viz.images(np.random.randn(20, 3, 64, 64), win=images, nrow=5)time.sleep(0.5)

依赖数据大小控制张数:images接收一个四维向量N×C×H×W,N是张数,C可以是1或3,分别代表黑白和彩色图像。

结果:

参考:

1、visdom image显示图像(四)_alex1801的博客-CSDN博客_visdom展示图片

2、Visdom可视化学习笔记(一):通过visdom画曲线和显示图片总结_ZZY_dl的博客-CSDN博客_visdom显示图片

Pytorch:visdom介绍相关推荐

  1. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

  2. visdom介绍(一)

    目录 1.概述 2.安装启动 3.初始化参数 4.是否成功连接 5.判断viz实例是否成功 6.关闭visdoms实例 7.重新初始化 8.使用示例 1.概述 visdom旨在促进(远程)数据的可视化 ...

  3. pytorch visdom蓝屏和无法启动

    python -m visdom.server pytorch visdom安装启动问题 https://blog.csdn.net/qq_32523711/article/details/10334 ...

  4. Visdom 介绍 | 二

    用于创建,组织和共享实时丰富数据可视化的灵活工具.支持Python. 概述 概念 设置 用法 API 注意事项 贡献 API 要快速了解visdom的功能,请查看example目录,或阅读以下详细信息 ...

  5. Python中可视化工具包Matplotlib和Visdom介绍

    一.Matplotlib 简介 Matplotlib 是一个可视化工具包,可以让我们使用Python 来可视化数据. 很多更高级的绘图库,也都是基于Matplotlib,比如seaborn,HoloV ...

  6. pytorch visdom安装启动问题

    visdom经过pip安装: pip install visdom pip install --upgrade visdom 一般这样安装是不会出问题的.但是如果这样安装之后,启动时提醒: Check ...

  7. pytorch + visdom 应用神经网络、CNN 处理手写字体分类

    运行环境 系统:win10 cpu:i7-6700HQ gpu:gtx965m python : 3.6 pytorch :0.3 普通神经网络 class Nueralnetwork(nn.Modu ...

  8. Visdom 介绍 | 一

    用于创建,组织和共享实时丰富数据可视化的灵活工具.支持Python. 概述 概念 设置 用法 API 待办事项 贡献 概述 Visdom旨在促进(远程)数据的可视化,重点是支持科学实验. 为你自己和你 ...

  9. [转载] Pytorch基础介绍

    参考链接: PyTorch的基础 Pytorch安装.https://zhuanlan.zhihu.com/p/26871672. Pytorch中文文档.https://pytorch-cn.rea ...

最新文章

  1. 四图,读懂 BIO、NIO、AIO、多路复用 IO 的区别
  2. js如何实现扫描身份证识别_人脸识别是如何实现的
  3. 手机号 imsi tmsi_抓取网站访客手机号
  4. 通用!Python保存一个对象的方式
  5. 【Linux】一步一步学Linux——mv命令(30)
  6. 2017年计算机组成原理1254,2018年7月试卷号1254计算机组成原理A.pdf
  7. mysql实验三单表和多表查询_数据库实验三(单表查询)
  8. 正则只能出现特定字符_python正则表达式的简单使用总结
  9. Android自定义View之paint(一)
  10. 解决bootstrap-table表头filter-control select控件被遮挡显示不全的问题
  11. 微信小程序之扫一扫功能
  12. uniapp 开发小程序对象传递数据结构封装一层$orig,使组件中v-model绑定value失效
  13. V831——串口通信
  14. 物联网、无线模块和组合模块,具体是什么意思
  15. 再见华为!一位嵌入式大佬的8年励志总结
  16. office运行时错误,部分系统文件可能丢失或已损坏(错误代码:0x80040154)
  17. 怎么在alert里加图片_鹅蛋怎么挑选?教你2招,一看一摇听声音
  18. Java将Unicode转换成中文
  19. 牛客练习赛51c-勾股定理
  20. 双数组Trie的一种实现

热门文章

  1. Vim实用技巧pdf
  2. 向广大青少年普及推广人工智能相关科普知识和技能
  3. BRAM 和 URAM 大小
  4. 利用monment库做一个日历表
  5. jenkins Exec exit status not zero. Status [127] ,126,125解决方法
  6. 天猫5月都有哪些大活动? 我们抢先看
  7. Centos7.4升级内核为5.1 亲测可用
  8. 0day 第10章--10.5节:修改data中的cooki突破GS
  9. CentOS8安装U盘制作
  10. Docker中无法正常结束容器的解决思路 - Docker cannot kill or stop container