相比tensorboradx好处:
原生支持pytorch,可以直接传入pytorch的tensor数据,不用做类型转换。
实时响应。
官方文档:visdom · PyPI
vis = Visdom()
pip install visdom # 安装python -m visdom.server # 开服务, http://localhost:8097
解决python -m visdom.server启动服务失败的问题_陆三斤的博客-CSDN博客
构建一个Visdom类
import numpy as npfrom visdom import Visdomvis = Visdom()
vis.image
彩图
vis.image(np.random.rand(3, 512, 256), win='窗口id,可以用中文',opts={'title': 'title', 'caption': 'caption会在开头和结尾都重复一遍'})

灰度图
vis.image(np.random.rand(100, 50), win='test', opts={'title': '可以放灰度图1'})vis.image(np.random.rand(1, 100, 50), win='test2', opts={'title': '可以放灰度图2'})# 不能用PIL图片,会报错:AttributeError: 'PngImageFile' object has no attribute 'shape'# 其实opencv读入的图也不行,channel通道要放在最左边的。visdom本就是针对pytorch设计的。
但是初始窗口默认大小好像会不一样~~
vis.images
vis.images(np.random.randn(20, 3, 64, 64), opts={'title': '可以放多张图'})vis.images(np.random.randn(20, 3, 64, 64), nrow=4, opts={'title': '控制每行展示图片上限'})# 第2维,使用1通道、3通道都是可以的

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

env
这个参数是每个子函数都有的,不仅是text函数
vis.text('env可以切换不同的环境', win='test', env='test')

vis.line
一条曲线
初始化窗口
vis.line([0.], [0.], win='train_loss', opts={'title': 'train loss'})


vis.line([1, 2, 3, 1], win='train_loss')
没有输入x的时候,y的值平分在X=0~1的轴上显示:
点击右下角的Edit,可以跳转到一个工具页:
vis.line([1, 2, 3, 1], [1, 4, 2, 3], win='train_loss')
可以指定X的值
vis.line([5, 6], [5, 6], win='train_loss', update='append')
增加标记点
两条曲线
注意Y的输入方法,每次输入所有曲线的一个点的值,最后再包到一个list里
vis.line([[1, 4], [2, 3], [3, 2], [4, 1]], [0, 1, 2, 3], win='test',opts={'title': 'test loss&acc.', 'legend': ['loss', 'acc.']})

vis.line([[6, -1]], [5], win='test', update='append')
添加标记点
