Visdom使用

Visdom

Visdom是一个面向科学研究的可视化工具,可以帮助你可视化和理解数据。它是 Facebook Research 开发的一个基于 Python 的可视化库,可以在Web浏览器中实时显示和更新图表、图像、文本等各种数据。

1 安装Visdom

可以使用以下命令安装Visdom:

pip install visdom
2 启动Visdom服务器

在终端中运行以下命令启动Visdom服务器:

python -m visdom.server

根据显示在浏览器中输入: http://localhost:8097

3 在代码中使用Visdom
import visdom
vis = visdom.Visdom()
# 在创建 Visdom 对象之后,可以使用以下方法来进行可视化
vis.line(X, Y, opts=None, win=None, env=None, update=None, name=None)# 绘制折线图。
vis.image(img, opts=None, win=None, env=None, update=None, name=None) # 绘制图片。
vis.images(imgs, opts=None, win=None, env=None, update=None, name=None) # 批量绘制图片。
vis.heatmap(X, opts=None, win=None, env=None, update=None, name=None)# 绘制热力图。
vis.contour(X, Y=None, Z=None, opts=None, win=None, env=None, update=None, name=None)# 绘制等高线图。
vis.scatter(X, Y=None, opts=None, win=None, env=None, update=None, name=None)# 绘制散点图。
vis.bar(X, opts=None, win=None, env=None, update=None, name=None) # 绘制柱状图。
vis.pie(X, opts=None, win=None, env=None, update=None, name=None) # 绘制饼图。
vis.stem(X, Y=None, opts=None, win=None, env=None, update=None, name=None) # 绘制棒图。
vis.text(text, opts=None, win=None, env=None, update=None, name=None) # 绘制文本。
vis.properties(opts, win=None, env=None, update=None, name=None) # 设置可视化窗口的属性。
vis.updateTrace(X, Y, win, env=None, name=None) # 更新折线图或散点图。
vis.close(win=None, env=None) # 关闭可视化窗口。
vis.clear(win=None, env=None) # 清空可视化窗口。
vis.save(envs=None) # 保存可视化窗口的状态,以便下次使用。
#  其中,参数的含义如下:
#  `X`:x轴上的数据,可以是标量、向量、矩阵或张量。
#  `Y`:y轴上的数据,可以是标量、向量、矩阵或张量。
#  `Z`:等高线图上的高度值,可以是标量、向量、矩阵或张量。
#  `opts`:可视化选项,包含各种绘图参数的字典。
#  `win`:可视化窗口的名称。
#  `env`:可视化窗口所属的环境名称。
#  `update`:更新的方式,可以是 "append" 或 "replace"。
#  `name`:数据的名称。
# 示例
visdom.line(X=None, Y=None, win=None, update=None, name=None
opts = dict(
    title="图表标题",
    xlabel="x 轴标签",
    ylabel="y 轴标签",
    legend="一个包含数据集名称的列表,用于在图例中显示不同的数据集",
    width="图表宽度",
    height="图表高度",
    marginleft="左侧边距",
    marginright="右侧边距",
    margintop="顶部边距",
    marginbottom="底部边距",
    xtick="x 轴刻度线 可以是一个包含刻度值的列表,或者是一个形如 (start, end, step) 的元组,用于指定刻度范围和步长 ",
    ytick="y 轴刻度线 可以是一个包含刻度值的列表,或者是一个形如 (start, end, step) 的元组,用于指定刻度范围和步长 ",
    markers="数据点标记类型 可以是一个包含标记名称的列表,或者是一个标记名称 支持的标记类型包括='dot'、'cross'、'plus'、'square'、'diamond'、'triangle-up'、'triangle-down'、'star'、'hexagon'、'pentagon'、'octagon' 和 'vline' ",
    markercolor="数据点标记颜色 可以是一个包含颜色名称或颜色代码的列表,或者是一个颜色名称或颜色代码 如果提供了一个包含多个颜色的列表,则每个数据集将使用该列表中的下一个颜色 ",
    linecolor="折线颜色 可以是一个颜色名称或颜色代码 ",
    fillarea="是否填充折线下方的区域 可以是一个布尔值,也可以是一个形如 (lower_bound, upper_bound) 的元组,用于指定填充区域的上限和下限 ",
    fillcolor="填充颜色 可以是一个颜色名称或颜色代码 如果提供了一个包含多个颜色的列表,则每个数据集将使用该列表中的下一个颜色 ",
))

4 可视化线条

单条线

import visdom

# 创建 Visdom 客户端
vis = visdom.Visdom()

# 定义直线的 x 和 y 坐标
x = [1, 2, 3, 4, 5]
y = [1, 3, 2, 4, 5]

# 绘制直线
line = vis.line(X=x, Y=y, opts=dict(title='Line', xlabel='x', ylabel='y'))


两条线,按点更新

import numpy as np
import visdom

# 创建 Visdom 客户端
vis = visdom.Visdom()

# 绘制多条直线,每次绘制一点
vis.line(X=[1], Y=[[2, 3]], win='1', update='append',
         opts=dict(title='Two Lines', xlabel='x', ylabel='y', legend=['Line 1', 'Line 2'])
         )
vis.line(X=[2], Y=[[6, 7]], win='1', update='append',
         opts=dict(title='Two Lines', xlabel='x', ylabel='y', legend=['Line 1', 'Line 2'])
         )

实际应用

import numpy as np
import visdom
# 创建 Visdom 客户端
vis = visdom.Visdom()
for epoch in range(0, 20):
trainloss = np.random.randint(1, 50, dtype=np.uint8)
valloss = np.random.randint(1, 50, dtype=np.uint8)
vis.line(X=[epoch], Y=[[trainloss, valloss]], win='loss', update='append', opts=dict(title='LOSS', legend=['trainloss', 'valloss']))

多条线,按条更新

import numpy as np
import visdom

# 创建 Visdom 客户端
vis = visdom.Visdom()

# 绘制多条直线,每次绘制一条
vis.line(X=[1, 2, 3], Y=[4, 5, 7], win='2', update='append', name='line1',
         opts=dict(title='Lines', xlabel='x', ylabel='y', legend=['Line 1', 'Line 2', 'Line 3']) )
vis.line(X=[2, 3, 4], Y=[4, 6, 7], win='2', update='append', name='line2',
         opts=dict(title='Lines', xlabel='x', ylabel='y', legend=['Line 1', 'Line 2', 'Line 3']) )
vis.line(X=[3, 4, 5], Y=[4, 6, 7], win='2', update='append', name='line3',
         opts=dict(title='Lines', xlabel='x', ylabel='y', legend=['Line 1', 'Line 2', 'Line 3']) )


5 可视化图片

一张图片

import numpy as np
import visdom

# 创建 Visdom 客户端
vis = visdom.Visdom()

image = np.random.randint(0, 255, (3, 40, 40), dtype=np.uint8)  # shape=[C,H,W]
vis.image(image, win='image', opts={'title': 'RGB Image'})


多张图片

import numpy as np
import visdom

# 创建 Visdom 客户端
vis = visdom.Visdom()

images = np.random.randint(0, 255, (16, 3, 40, 40))  # shape=[B,C,H,W]
vis.images(images, win='images', nrow=4, opts={'title': 'RGB Image'})


6 可视化文本

一段文本

viz.text('Hello, world!', win='text')

在这里插入图片描述

窗口大小

eg:宽度为800像素,高度为400像像素

opts=dict( width=800, height=400)
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值