visdom的安装及在pytorch下损失函数的可视化应用 | 数盟

2018/9/18更新  感觉tensorboardX插件更好用,已转用https://github.com/lanpa/tensorboardX

更新:新版visdom0.1.7安装方式为:conda install -c srivasv visdom

pytorch下可采用visidom作为可视化工具

1. 安装

pip install visdom
conda install visdom

启动

python -m visdom.server
在浏览器输入:http://localhost:8097/,即可启动

Note:

(1)有时安装了之后不能用,比如网页什么都没有,可尝试替换 Anaconda3\Lib\site-packages\visdom下的static文件夹(如果你用anaconda的话),是因为网络的原因,导致文件下载不全,文件链接链接:https://pan.baidu.com/s/1c4liqoK 密码:q1sx,在Linux(Ubuntu)下也是同样的处理,在Lib\site-packages\visdom下替换static文件,重启生效!!!!

(2)有时候启动visdom的时候,显示目标计算机拒绝等网络连接不成功,可用如下测试

from visdom import Visdom

viz = Visdom()

assert viz.check_connection()

主要是我是用了代理上网,导致我的IE浏览器的Internet选项被改变,如下图:

2. 可视化损失函数的示例

首先介绍一下visdom中的line()函数:

1) 画一条直线

from visdom import Visdom

import numpy as np

viz = Visdom(env=’my_wind’)#设置环境窗口的名称是’my_wind’,如果不设置名称就在main中

tr_loss=list(range(100))

viz.line(Y=np.array(tr_loss), opts=dict(showlegend=True))

在运行上面的程序之前,首先启动visdom,在cmd里输入python -m visdom.server,然后在浏览器里输入:http://localhost:8097/,默认是在main环境下:

上面的代码里,我们设置环境窗口的名称是’my_wind’,所以我们需要打开my_wind环境,如下:

运行代码!

2) 如果要画多条直线

from visdom import Visdom

import numpy as np

viz = Visdom(env=’my_wind’)#设置环境窗口的名称是’my_wind’,如果不设置名称就在main中

tr_loss=list(range(100))ts_loss=list(range(10,110))

viz.line(Y=np.column_stack((np.array(tr_loss),np.array(ts_loss))), opts=dict(showlegend=True))

注意:以上变量的值在绘制前是确定了的

3)如果要绘制随程序运行逐渐产生的值,如在训练的时候,可以采用line的update方法

from visdom import Visdom

import numpy as np

viz = Visdom(env=’my_wind’)

x,y=0,0

win = viz.line(

X=np.array([x]),

Y=np.array([y]),

opts=dict(title=’two_lines’))

for i in range(10):

x+=i

y+=i

viz.line(

X=np.array([x]),

Y=np.array([y]),

win=win,#win要保持一致

update=’append’)

最后是深度学习训练过程中的损失函数可视化,参考的是pytorch实战指南里的可视化操作。

将损失函数的可视化放在visual_loss.py文件:

#coding:utf8

import visdom

import time

import numpy as np

class Visualizer(object):

def __init__(self, env=’default’, **kwargs):

self.vis = visdom.Visdom(env=env, **kwargs)

self.index = {}

def plot_many_stack(self, d):

”’

self.plot(‘loss’,1.00)

”’

name=list(d.keys())

name_total=” “.join(name)

x = self.index.get(name_total, 0)

val=list(d.values())

if len(val)==1:

y=np.array(val)

else:

y=np.array(val).reshape(-1,len(val))

#print(x)

self.vis.line(Y=y,X=np.ones(y.shape)*x,

win=str(name_total),#unicode

opts=dict(legend=name,

title=name_total),

update=None if x == 0 else ‘append’

)

self.index[name_total] = x + 1

在jupyter notebook——loss_visual_test.ipynb中进行函数功能测试:

from visual_loss import Visualizer

from torchnet import meter

#用 torchnet来存放损失函数,如果没有,请安装conda install torchnet

”’

训练前的模型、损失函数设置

vis = Visualizer(env=’my_wind’)#为了可视化增加的内容

loss_meter = meter.AverageValueMeter()#为了可视化增加的内容

for epoch in range(10):

#每个epoch开始前,将存放的loss清除,重新开始记录

loss_meter.reset()#为了可视化增加的内容

model.train()

for ii,(data,label)in enumerate(trainloader):

out=model(input)

loss=…

loss_meter.add(loss.data[0])#为了可视化增加的内容

#loss可视化

#loss_meter.value()[0]返回存放的loss的均值

vis.plot_many_stack({‘train_loss’: loss_meter.value()[0]})#为了可视化增加的内容

”’

#示例

vis = Visualizer(env=’my_wind’)#为了可视化增加的内容

loss_meter = meter.AverageValueMeter()#为了可视化增加的内容

for epoch in range(10):

loss_meter.reset()#为了可视化增加的内容

loss_meter.add(epoch)#假设loss=epoch

vis.plot_many_stack({‘train_loss’: loss_meter.value()[0]})#为了可视化增加的内容

#如果还想同时显示test loss,如法炮制,并用字典的形式赋值,如下。还可以同时显示train和test accuracy

#vis.plot_many_stack({‘train_loss’: loss_meter.value()[0],’test_loss’:test_loss_meter.value()[0]})#为了可视化增加的内容

文件结构:

其中__init__.py为空

注意:我的visdom版本为

也不知道用的是哪个,通过conda install visdom安装的版本比较旧,官网的最新版本是

安装方式是在终端输入

conda install -c srivasv visdom
———————

作者:lxx516

来源:CSDN

原文:https://blog.csdn.net/LXX516/article/details/79019328?utm_source=copy

注:转载文章均来自于公开网络,仅供学习使用,不会用于任何商业用途,如果侵犯到原作者的权益,请您与我们联系删除或者授权事宜,联系邮箱:contact@dataunion.org。转载数盟网站文章请注明原文章作者,否则产生的任何版权纠纷与数盟无关。
期待你一针见血的评论,Come on!

不用想啦,马上 "登录"  发表自已的想法.