Pytorch可视化之Visdom使用实例
作者:ting_qifengl 发布时间:2021-01-05 12:16:13
一、Visdom简介
Visdom是由Facebook公司开发的一个进行数据可视化的Web应用程序,支持Torch、Numpy、Pytorch这3个库的创建、管理和分享实时的数据可视化结果。
二、安装和运行
可直接使用pip进行安装,命令如下:
pip install visdom
安装过程如下:
安装完成后,运行下面的代码启动visdom服务器(运行需要时间,需要稍等一下;下图中的报错ERROR我没有管,不影响正常运行):
python -m visdom.server
按照提示,在浏览器中输入http://localhost:8097就可以访问visdom了。初始界面如下图所示,是一个没有任何视窗的main环境。
三、可视化例子
1、输出Hello World!
打开开发工具(我用的是Pycharm2020.3),新建程序文件,输入以下代码:
import visdom
vis = visdom.Visdom()
vis.text("Hello World!")
点击运行,返回查看浏览器。这时浏览器会出现一个视窗,内容为“Hello World!”。
拖拽视窗右下角箭头处(如图绿框处)可对视窗大小进行缩放,拖动视窗顶部横条(如图红框处)可以移动视窗。
2、显示图像
visdom可以直接显示Tensor格式的图像数据。
打开开发工具,新建程序文件,输入以下代码:
import visdom
from PIL import Image
import torchvision.transforms.functional as TF
demo_pic = Image.open("1.jpg")
img_tensor = TF.to_tensor(demo_pic)
vis = visdom.Visdom()
vis.image(img_tensor)
结果如下图所示:
可以用images()函数同时显示多张图片,代码如下:
import visdom
from PIL import Image
import torchvision.transforms.functional as TF
import torch
demo_pic = Image.open("1.jpg")
img_tensor = TF.to_tensor(demo_pic)
img_tensors = torch.Tensor([img_tensor.numpy(), img_tensor.numpy()])
vis = visdom.Visdom()
vis.images(img_tensors)
结果如下:
3、绘制散点图
使用scatter()函数可以绘制二维或者三维的散点图。代码如下:
import visdom
import numpy as np
import torch
Y = np.random.rand(100)
vis = visdom.Visdom()
# vis = visdom.Visdom(env='my_wind')#设置环境窗口的名称是'my_wind',如果不设置默认为main
# 2—D
twoD_scatter = vis.scatter(X=torch.rand(100, 2),
Y=(Y + 1.5).astype(int), # 转换成100个1或2的整数
opts=dict(
legend=['Apples', 'Pears'], # 图例名称
xtickmin=-1, # 设置x坐标轴下限
xtickmax=2.5, # 设置x坐标轴上限
xtickstep=0.5, # 设置x坐标轴间隔
ytickmin=-1,
ytickmax=2.5,
ytickstep=0.5,
markersymbol='dot' # 设置数据显示样式
),
)
# 3-D
# 3d scatterplot with custom labels and ranges
threeD_scatter = vis.scatter(X=np.random.rand(100, 3),
Y=(Y + 1.5).astype(int),
opts=dict(
legend=['Men', 'Women'],
markersize=5, # 标记大小
xtickmin=0,
xtickmax=2,
xlabel='Arbitrary', # 标签
xtickvals=[0, 0.75, 1.6, 2], # 设置坐标轴显示值
ytickmin=0,
ytickmax=2,
ytickstep=0.5,
ztickmin=0,
ztickmax=1,
ztickstep=0.5,
)
)
运行结果如下图所示:
如果想要通过程序实现散点图参数的更新,可以使用update_window_opts()函数,代码如下:
vis.update_window_opts(
win=twoD_scatter,
opts=dict(
legend=['Apples', 'Pears'],
xtickmin=0,
xtickmax=1,
xtickstep=0.5,
ytickmin=0,
ytickmax=1,
ytickstep=0.5,
markersymbol='dot'
)
)
update_window_opts()传入两个参数,第一个是视窗的实例,例子中是twoD_scatter;第二个是更新的参数字典opts。
更新后结果如下图所示:
4、绘制线条
4.1 绘制一条直线
代码如下:
import visdom
import numpy as np
vis = visdom.Visdom(env='my_windows') # 设置环境窗口的名称,如果不设置名称就默认为main
# 绘制一条直线
x = list(range(10))
y = list(range(10))
# 使用line函数绘制直线 并选择显示坐标轴
vis.line(X=np.array(x), Y=np.array(y), opts=dict(showlegend=True))
结果如图所示:
4.2 绘制两条直线
代码如下:
# 绘制两条直线
import visdom
import numpy as np
vis = visdom.Visdom(env='my_windows')
x = list(range(10))
y = list(range(10))
z = list(range(1,11))
vis.line(X=np.array(x), Y=np.column_stack((np.array(y), np.array(z))), opts=dict(showlegend=True))
结果如图所示:
4.3 绘制正弦曲线
代码如下:
import visdom
import torch
vis = visdom.Visdom(env='sin')
x = torch.arange(0, 100, 0.1)
y = torch.sin(x)
vis.line(X=x,Y=y,win='sin(x)',opts=dict(showlegend=True))
结果如图所示:
参考文献
Pytorch深度学习入门--曾芃壹
https://www.pythonf.cn/read/3068
来源:https://blog.csdn.net/ting_qifengl/article/details/119443813
猜你喜欢
- 2008北京奥运会块到了,下面的js代码将告诉你,离奥运会开幕还要多少天!让我们一起迎接这美好的时刻。相关文章推荐:各种北京2008奥运会倒
- 1.元字符: . 它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行 ^ 匹配行首。除非
- 思路:使用socket传输文件过程中,如果单次传输每次只能发送一部分数据,如果针对大文件,一次传输肯定是不行的,所以需要我们在传输的时候提前
- 一、定义限制访问频率的中间件common/middleware.pyimport timefrom django.utils.depreca
- 本文实例讲述了PHP实现判断二叉树是否对称的方法。分享给大家供大家参考,具体如下:问题请实现一个函数,用来判断一颗二叉树是不是对称的。注意,
- 目录mapfilterreducezipsortedmapmap其中,function 参数表示要传入一个函数,其可以是内置函数、自定义函数
- oracle10g数据备份 1.用sql/plus developer,选中要备份的数据表,右击选择"Export data&qu
- 最近准备使用Python+Hadoop+Pandas进行一些深度的分析与机器学习相关工作。(当然随着学习过程的进展,现在准备使用Python
- 前言最近将使用爬虫爬取的链接保存到 mysql 数据库中时,发现我将链接使用 json_encode 保存时候,在数据库中却显示了转义字符,
- 1 获取轮廓OpenCV2获取轮廓主要是用cv2.findContoursimport numpy as npimport cv2im =
- 1. python中的变量:python中的变量声明不需要像C++、Java那样指定变量数据类型(int、float等),因为python会
- 在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。我前段时间写
- 在大家的日常python程序的编写过程中,都会有自己解决某个问题的解决办法,或者是在程序的调试过程中,用来帮助调试的程序公式。小编通过上万行
- 前言今天帮师兄赶在deadline之前画论文的图,现学现卖很是刺激,现把使用matplotlib的子库pyplot画折线图和柱状图的代码记录
- mssql的每个varchar、text字段都被自动插入一段js代码,即使删除这段代码,如果没有从源头上解决,几分钟后,js代码就又会自动插
- 互联网是一个飞速发展的行业,任何的止步不前都会导致被淘汰,只是时间早晚的问题,所以一个公司的学习与创新能力是非常重要的,特别是对于一个年轻的
- 1、前期准备通过 pip 或 easy_install 安装了 pymongo 之后, 就能通过 Python 调教 mongodb 了.接
- 实例如下:#!/usr/bin/env python# -*- coding: utf-8 -*-import socket#创建一个soc
- 如何判断年份是否为闰年闰年:所谓闰年即能被4整除,但不能被100整除的年份,或者能被400整除的年份。def Year():
- getattr()函数是Python自省的核心函数,具体使用大体如下:获取对象引用getattrGetattr用于返回一个对象属性,或者方法