作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122073099
目录
第1章 概述
1.1 概述
在深度学习领域,模型训练是一个必须的过程,因此常常需要实时监听并可视化一些数据,如损失值loss,正确率acc等。
在Tensorflow中,最常使用的工具非Tensorboard莫属;
在Pytorch中,也有类似的TensorboardX,但据说其在张量数据加载的效率方面不如visdom。
visdom是FaceBook开发的一款可视化工具,其实质是一款在网页端的web服务器,对Pytorch的支持较好。
github上,很多开源项目,都通过visdom可视化训练结果,甚至是训练过程的,包括图像生成开源项目pytorch-CycleGAN-and-pix2pix ,因此有必要熟悉一下visdom的使用。
1.2 工作原理
(1)在命令行方式下启动visdom server
(2)启动后台进程:visdom
(3)通过IE打开前台可视化
(4)需要可视化的程序启动创建wind = Visdom() session
(5)通过wind对象提供的方法,visdom server输出可视化图像
第2章 安装与启动
2.1 激活conda环境
conda info -e
conda activate pytorch-gpu-os
2.2 安装
pip install visdom
安装成功的界面如下图所示
安装成功后,我们需要将visdom启动。
2.3 启动后台visdom server
类似于TensorFlow的TensorBoard,要使用Visdom,就要先在终端开启监听命令
(1)vidsom启动命令
python -m visdom.server
visdom成功启动后,会返回一个visdom server的网址。
2.4 启动前台IE显示
根据显示的网址然后在浏览器里输入:
http://localhost:8097
IE作为Client端,连接visdom server.
进入后,是一个空白的窗口。
第3章 使用:通过pytorch代码可视化信息
3.1 导入库
from visdom import Visdom
import numpy as np
import time
import requests
import os
3.2 实例化一个Visdom窗口
# 实例化一个窗口
wind = Visdom()
3.3 通过wind对象可视化图像
(1)划单条线
# 初始化窗口信息
wind.line( [0.], # Y的第一个点的坐标
[0.], # X的第一个点的坐标
win = 'train_loss', # 窗口的名称
opts = dict(title = 'train_loss') # 图像的标例
)
# 更新数据
for step in range(10):
# 随机获取loss,这里只是模拟实现
loss = np.random.randn() * 0.5 + 2
wind.line([loss],[step], win = 'train_loss', update = 'append')
time.sleep(0.5)
(2)显示多条线
# 初始化窗口参数
wind.line([[0.,0.]],[0.], win = 'train',opts = dict(title = 'loss&acc',legend = ['loss','acc']))
# 更新窗口数据
for step in range(10):
loss = 0.2 * np.random.randn() + 1
acc = 0.1 * np.random.randn() + 0.5
wind.line([[loss, acc]],[step],win = 'train',update = 'append')
time.sleep(0.5)
(3)显示单张图片文件
# 图片
# 单张图片
wind.image(
np.random.rand(3, 512, 256),
opts={
'title': 'Random',
'showlegend': True
}
)
(4)显示一批图片
# 多张图片
wind.images(
np.random.rand(20, 3, 64, 64),
opts={
'title': 'multi-images',
}
)
(5)显示散点图
# 散点图
Y = np.random.rand(100)
Y = (Y[Y > 0] + 1.5).astype(int), # 100个标签1和2
old_scatter = wind.scatter(
X=np.random.rand(100, 2) * 100,
Y=Y,
opts={
'title': 'Scatter',
'legend': ['A', 'B'],
'xtickmin': 0,
'xtickmax': 100,
'xtickstep': 10,
'ytickmin': 0,
'ytickmax': 100,
'ytickstep': 10,
'markersymbol': 'cross-thin-open',
'width': 800,
'height': 600
},
)
# time.sleep(5)
# 更新样式
wind.update_window_opts(
win=old_scatter,
opts={
'title': 'New Scatter',
'legend': ['Apple', 'Banana'],
'markersymbol': 'dot'
}
)
(6)显示3D散点图
# 3D散点图
wind.scatter(
X=np.random.rand(100, 3),
Y=Y,
opts={
'title': '3D Scatter',
'legend': ['Men', 'Women'],
'markersize': 5
}
)
(7)显示柱状图
# 柱状图
wind.bar(X=np.random.rand(20))
wind.bar(
X=np.abs(np.random.rand(5, 3)), # 5个列,每列有3部分组成
opts={
'stacked': True,
'legend': ['A', 'B', 'C'],
'rownames': ['2012', '2013', '2014', '2015', '2016']
}
)
wind.bar(
X=np.random.rand(20, 3),
opts={
'stacked': False,
'legend': ['America', 'Britsh', 'China']
}
)
(8)显示热力图
# 热力图
wind.heatmap(
X=np.outer(np.arange(1, 6), np.arange(1, 11)),
opts={
'columnnames': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],
'rownames': ['y1', 'y2', 'y3', 'y4', 'y5'],
'colormap': 'Electric'
}
)
(9)地表图
# 地表图
x = np.tile(np.arange(1, 101), (100, 1))
y = x.transpose()
X = np.exp((((x - 50) ** 2) + ((y - 50) ** 2)) / -(20.0 ** 2))
wind.contour(X=X, opts=dict(colormap='Viridis'))
(10)物体表面图
# 表面图
wind.surf(X=X, opts={'colormap': 'Hot'})
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122073099