相比tensorboradx好处:
原生支持pytorch,可以直接传入pytorch的tensor数据,不用做类型转换。
实时响应。

官方文档:visdom · PyPI

vis = Visdom()

  1. pip install visdom # 安装
  2. python -m visdom.server # 开服务, http://localhost:8097

解决python -m visdom.server启动服务失败的问题_陆三斤的博客-CSDN博客

构建一个Visdom类

  1. import numpy as np
  2. from visdom import Visdom
  3. vis = Visdom()

vis.image

彩图

  1. vis.image(np.random.rand(3, 512, 256), win='窗口id,可以用中文',
  2. opts={'title': 'title', 'caption': 'caption会在开头和结尾都重复一遍'})

image.png

灰度图

  1. vis.image(np.random.rand(100, 50), win='test', opts={'title': '可以放灰度图1'})
  2. vis.image(np.random.rand(1, 100, 50), win='test2', opts={'title': '可以放灰度图2'})
  3. # 不能用PIL图片,会报错:AttributeError: 'PngImageFile' object has no attribute 'shape'
  4. # 其实opencv读入的图也不行,channel通道要放在最左边的。visdom本就是针对pytorch设计的。

但是初始窗口默认大小好像会不一样~~
image.png

vis.images

  1. vis.images(np.random.randn(20, 3, 64, 64), opts={'title': '可以放多张图'})
  2. vis.images(np.random.randn(20, 3, 64, 64), nrow=4, opts={'title': '控制每行展示图片上限'})
  3. # 第2维,使用1通道、3通道都是可以的

image.png

vis.text

  1. vis.text(['可以放list', '会自动转为str文本内容', '但是不建议,跟append结合会有bug'], win='test')
  1. vis.text('写换行符是没用的,\n会转成空格', win='test', opts={'title': '文本'})
  2. vis.text('使用append自然就会换行了', win='test', append=True)
  3. vis.text('第三段', win='test', append=True)

image.png

env

这个参数是每个子函数都有的,不仅是text函数

  1. vis.text('env可以切换不同的环境', win='test', env='test')

image.png

vis.line

一条曲线

初始化窗口

  1. vis.line([0.], [0.], win='train_loss', opts={'title': 'train loss'})

image.png

image.png

  1. vis.line([1, 2, 3, 1], win='train_loss')

没有输入x的时候,y的值平分在X=0~1的轴上显示:
image.png
点击右下角的Edit,可以跳转到一个工具页:
image.png

  1. vis.line([1, 2, 3, 1], [1, 4, 2, 3], win='train_loss')

可以指定X的值
image.png

  1. vis.line([5, 6], [5, 6], win='train_loss', update='append')

增加标记点
image.png

两条曲线

注意Y的输入方法,每次输入所有曲线的一个点的值,最后再包到一个list里

  1. vis.line([[1, 4], [2, 3], [3, 2], [4, 1]], [0, 1, 2, 3], win='test',
  2. opts={'title': 'test loss&acc.', 'legend': ['loss', 'acc.']})

image.png

  1. vis.line([[6, -1]], [5], win='test', update='append')

添加标记点
image.png