百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

PyTorch学习笔记 6.可视化工具visdom

ztj100 2024-11-14 19:22 16 浏览 0 评论


一、visdom 简介

visdom 是Facebook 为PyTorch 打造的一款可视化工具,在2017年开源,代码地址:
https://github.com/fossasia/visdom,国内也可以使用其代码镜像:
https://gitee.com/mirrors/Visdom?_from=gitee_search

二、一些概念及简单使用

1. env 环境

visdom默认环境称为main,可以在使用时指定其它环境。不同用户、不同程序一般使用不同的环境。不同环境的可视化结果互相隔离、互不影响。

2. pane 窗格

可以大概理解为GUI编程的的一个Frame区域。一个环境里可以使用不同的窗格,每个窗格可视化或记录某一信息。

3. 安装

注意使用 visdom 要在操作系统GUI环境下。

pip install visdom

安装完以后,要通过下面命令启动visdom服务:

python -m visom.server
# 或直接用命令:
visdom

如果在linux环境下可以使用下面命令将服务放到后台运行:

nohup python -m visdom.server &

visdom会启动一个web服务,默认端口号8097。客户端与web server使用tornado通讯。

启动后,通过浏览器可以打开网址:
http://localhost:8097

4. 一些启动操作

-port: WEB服务端口
-hostname: 运行服务器的主机名
-base_url: 基础服务器网址(默认 = /)
-env_path: 重新加载环境的路径
-logging_level: 记录级别(默认 = INFO)。接受标准文本和数字记录值
-readonly: 标志以读取模式启动服务器
-enable_login: 需要用户名和密码才能登录
-force_new_cookie: 标记重置服务器使用的安全 Cookie,使当前登录 Cookie 无效。需要。-enable_login
-bind_local: 限制本机才能访问

5. 运行demo

克隆官网demo,运行里面的demo:

git clone https://gitee.com/mirrors/Visdom.git
cd Visdom
python3 demo.py 

在网页上显示:

三、一些输出项

1. Plotly提供的可视化API接口

vis.scatter : 2D 或 3D 散点图
vis.line : 线图
vis.stem : 茎叶图
vis.heatmap : 热力图
vis.bar : 条形图
vis.histogram: 直方图
vis.boxplot : 箱型图
vis.surf : 表面图
vis.contour : 轮廓图
vis.quiver : 绘出二维矢量场
vis.image : 图片
vis.text : 文本
vis.mesh : 网格图
vis.save : 序列化状态

2. 基础环境接口

Visdom 提供以下基础的环境接口:

vis.image : image
vis.images : list of images
vis.text : arbitrary HTML
vis.properties : properties grid
vis.audio : audio
vis.video : videos
vis.svg : SVG object
vis.matplot : matplotlib plot
vis.save : serialize state server-side

3. 环境操作API

关闭: 关闭一个窗口 id
vis.delete_env:删除指定环境
vis.win_exists:检查是否有窗口已经存在
vis.get_env_list:获取服务器上所有环境的列表
vis.win_hash: 获取窗口内容的 md5 哈希值
vis.get_window_data:获取窗口的当前数据
vis.check_connection:检查服务器是否连接
vis.replay_log:重播所提供的日志文件中的操作

4. 文本

import visdom
vis = visdom.Visdom(env=u'test1')

vis.text('Hello World', win='text1')

显示结果:


追回文本:

5. 绘制折线图

import visdom

import torch
from visdom import Visdom
import numpy as np

# 新建名为'test3'的环境
viz = Visdom(env='test3')

arr = np.random.rand(10)

# Numpy Array
viz.line(Y=arr)
# Python List
viz.line(Y=list(arr))
# PyTorch tensor
viz.line(Y=torch.Tensor(arr))

6. 绘制一个通用图(输入dict字典)

import visdom
vis = visdom.Visdom()

trace = dict(x=[1, 2, 3], y=[4, 5, 6], mode="markers+lines", type='custom',
             marker={'color': 'red', 'symbol': 104, 'size': "10"},
             text=["one", "two", "three"], name='1st Trace')
layout = dict(title="First Plot", xaxis={'title': 'x1'}, yaxis={'title': 'x2'})

vis._send({'data': [trace], 'layout': layout, 'win': 'mywin'})

7. 折线显示torch的一组数据

显示pytorch一段可视化代码:

import visdom
import torch
# 指定环境 
vis=visdom.Visdom(env=u'test1')

x = torch.arange(1,30,0.01)
y=torch.sin(x)
vis.line(X=x, Y=y, win='sinx', opts={'title':'y=sin(x)'})

输出结果:

8. 折线显示一个张量


import visdom
import torch
vis = visdom.Visdom(env=u'test2')

for i in range(10):
    vis.line(X=torch.FloatTensor([i]), Y=torch.FloatTensor([i**2]), win='loss', update='append' if i> 0 else None)
    

9. 显示一个全为1的矩阵图形

import visdom
import numpy as np

vis = visdom.Visdom(env='test4')
vis.text('test4', win='main')
vis.image(np.ones((3, 100, 100)))

10. append 增加数据

import visdom
import numpy as np
import time
vis = visdom.Visdom(env='test5')
# 利用update更新图像 update更新图像,append新增,replace 使用新数据,remove用于删除“name”中指定的跟踪
x = 0
y = 0
my_win = vis.line(X=np.array([x]), Y=np.array([y]), opts=dict(title='Update'))
for i in range(10):
    time.sleep(1)
    x += 1
    y += i
    vis.line(X=np.array([x]), Y=np.array([y]), win=my_win, update='append')

11. video显示视频

# coding=utf-8
import time
from visdom import Visdom
import requests
import os
import numpy as np

viz = Visdom(server='http://127.0.0.1', port=8097)
assert viz.check_connection()

# 视频下载可能比较慢,耐心等几分中
video_file = "demo.ogv"
if not os.path.exists(video_file):
    video_url = 'http://www.jplayer.org/video/ogv/Big_Buck_Bunny_Trailer.ogv'
    res = requests.get(video_url)
    with open(video_file, "wb") as f:
        f.write(res.content)

viz.video(videofile=video_file)
time.sleep(1000*10)

显示视频需要浏览器的支持, 我没有测试成功。

12. 生成彩色随机图片

import visdom
import torch

# 新建一个连接客户端
# 指定env = 'test1',默认是'main',注意在浏览器界面做环境的切换
vis = visdom.Visdom(env='test6')

# 绘制4张图片随机的彩色图片
vis.images(torch.randn(4, 3, 128, 128).numpy(), nrow=2, win='imgs', opts={'title': 'imgs'})

13. 其它一些输出项

  • vis.properties 在窗格中显示可编辑的属性
  • vis.audio 播放音频
  • vis.svg 绘制一个SVG对象
  • vis.matplot 此函数绘制Matplotlibplot
  • vis.plotlyplot 绘制一个Plotly图对象
  • vis.embeddings 使用Barnes-Hut t-SNE算法)可视化一组特征
  • vis.save 保存在visdom服务器上仍然有效的环境
  • vis.scatter 绘制2D或3D散点图
  • vis.stem 此函数绘制stem图
  • vis.heatmap 绘制热图
  • vis.bar 绘制规则的,堆叠的或分组的条形图
  • vis.histogram 绘制指定数据的直方图
  • vis.boxplot 绘制指定数据的箱形图
  • vis.surf 绘制表面图
  • vis.contour 绘制轮廓图
  • vis.quiver 绘制一个抖动图
  • vis.close 关闭特定的窗口
  • vis.delete_env 完全删除指定的环境
  • vis.fork_env 派生类似于UI功能的环境
  • vis.win_exists 该函数返回一个布尔值,指示服务器上是否已经存在指定窗口"win"
  • vis.get_env_list 此函数在调用时返回服务器上所有环境的列表
  • vis.win_hash 如果服务器上存在窗口"win"的内容,则此函数返回md5哈希值。否则返回None
  • vis.replay_log 此函数获取虚拟日志的内容,并将其重播到当前服务器以恢复状态或处理所有丢失的条目。

相关推荐

如何将数据仓库迁移到阿里云 AnalyticDB for PostgreSQL

阿里云AnalyticDBforPostgreSQL(以下简称ADBPG,即原HybridDBforPostgreSQL)为基于PostgreSQL内核的MPP架构的实时数据仓库服务,可以...

Python数据分析:探索性分析

写在前面如果你忘记了前面的文章,可以看看加深印象:Python数据处理...

CSP-J/S冲奖第21天:插入排序

...

C++基础语法梳理:算法丨十大排序算法(二)

本期是C++基础语法分享的第十六节,今天给大家来梳理一下十大排序算法后五个!归并排序...

C 语言的标准库有哪些

C语言的标准库并不是一个单一的实体,而是由一系列头文件(headerfiles)组成的集合。每个头文件声明了一组相关的函数、宏、类型和常量。程序员通过在代码中使用#include<...

[深度学习] ncnn安装和调用基础教程

1介绍ncnn是腾讯开发的一个为手机端极致优化的高性能神经网络前向计算框架,无第三方依赖,跨平台,但是通常都需要protobuf和opencv。ncnn目前已在腾讯多款应用中使用,如QQ,Qzon...

用rust实现经典的冒泡排序和快速排序

1.假设待排序数组如下letmutarr=[5,3,8,4,2,7,1];...

ncnn+PPYOLOv2首次结合!全网最详细代码解读来了

编辑:好困LRS【新智元导读】今天给大家安利一个宝藏仓库miemiedetection,该仓库集合了PPYOLO、PPYOLOv2、PPYOLOE三个算法pytorch实现三合一,其中的PPYOL...

C++特性使用建议

1.引用参数使用引用替代指针且所有不变的引用参数必须加上const。在C语言中,如果函数需要修改变量的值,参数必须为指针,如...

Qt4/5升级到Qt6吐血经验总结V202308

00:直观总结增加了很多轮子,同时原有模块拆分的也更细致,估计为了方便拓展个管理。把一些过度封装的东西移除了(比如同样的功能有多个函数),保证了只有一个函数执行该功能。把一些Qt5中兼容Qt4的方法废...

到底什么是C++11新特性,请看下文

C++11是一个比较大的更新,引入了很多新特性,以下是对这些特性的详细解释,帮助您快速理解C++11的内容1.自动类型推导(auto和decltype)...

掌握C++11这些特性,代码简洁性、安全性和性能轻松跃升!

C++11(又称C++0x)是C++编程语言的一次重大更新,引入了许多新特性,显著提升了代码简洁性、安全性和性能。以下是主要特性的分类介绍及示例:一、核心语言特性1.自动类型推导(auto)编译器自...

经典算法——凸包算法

凸包算法(ConvexHull)一、概念与问题描述凸包是指在平面上给定一组点,找到包含这些点的最小面积或最小周长的凸多边形。这个多边形没有任何内凹部分,即从一个多边形内的任意一点画一条线到多边形边界...

一起学习c++11——c++11中的新增的容器

c++11新增的容器1:array当时的初衷是希望提供一个在栈上分配的,定长数组,而且可以使用stl中的模板算法。array的用法如下:#include<string>#includ...

C++ 编程中的一些最佳实践

1.遵循代码简洁原则尽量避免冗余代码,通过模块化设计、清晰的命名和良好的结构,让代码更易于阅读和维护...

取消回复欢迎 发表评论: