在深度学习领域,模型训练是一个必须的过程,因此常常需要实时监听并可视化一些数据,如损失值loss,正确率acc等。在Pytorch中,也有类似的TensorboardX,但据说其在张量数据加载的效率方面不如visdom。visdom是FaceBook开发的一款可视化工具,其实质是一款在网页端的web服务器,对Pytorch的支持较好。
一、visdom可视化工具配置
1.1 安装visdom库
pip install visdom
1.2 配置环境
要使用Visdom,需在终端开启监听命令
python -m visdom.server
等待启动成功之后,命令窗口会返回一个网址,根据提示网址输入至浏览器中,eg(http://localhost:8097 ),最好使用chrome浏览器,安装结果及显示界面如下图
二.使用Visdom可视化神经网络的训练过程
2.1 监听train_loss的变化
import visdom
import numpy as np
import time
if \_\_name\_\_ == "\_\_main\_\_":
vis = visdom.Visdom(env=u'test') # 指定env,默认端口port还是8097,host默认是'localhost',u表示将后面跟的字符串以unicode格式存储,那么可以识别中文字符
for step in range(1000):
loss = np.random.randn()
vis.line([loss],[step],win = 'train\_loss',update = 'append')
time.sleep(0.5)
2.2 同时监听loss和Acc
for step in range(100):
loss = abs(np.random.randn()) + 1
acc = abs(np.random.randn())
vis.line([[loss, acc]],[step],win = 'train',update = 'append')
time.sleep(0.5)
3.3 监听图像数据
需要注意的是,openCV按照BGR读取,而visdom 默认按照RGB显示,因此要进行通道转换
img = cv2.imread('test.jpg')
img = cv2.cvtColor(img, cv2.COLOR\_BGR2RGB)
img = np.transpose(img, (2, 0, 1))
vis.image(img, win='img')
3.4 顺便记录个log
def append\_log(visdom\_in, log\_win, info):
localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
line = "<b>[{0}]</b>: {1}".format(localtime, info)
visdom\_in.text(line, win=log\_win, append=True)
if \_\_name\_\_ == "\_\_main\_\_":
vis = visdom.Visdom(env=u'test') # 指定env,默认端口port还是8097,host默认是'localhost',u表示将后面跟的字符串以unicode格式存储,那么可以识别中文字符
text = vis.text('Hello World !')
for step in range(1000):
loss = abs(np.random.randn())
append\_log(vis, text, "loss:{}".format(loss))
time.sleep(0.1)
visdom操作起来就是如此简单,所以有需求的小伙伴可以尝试一下。