1. 程式人生 > >pytorch下可采用visidom作為可視化工具

pytorch下可采用visidom作為可視化工具

設置 運行 opts data 不能 文件鏈接 沒有 上網 bsp

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

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

pytorch下可采用visidom作為可視化工具

1. 安裝

pip install visdomconda 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 Visdomviz = Visdom()assert viz.check_connection()

主要是我是用了代理上網,導致我的IE瀏覽器的Internet選項被改變,如下圖:

2. 可視化損失函數的示例


首先介紹一下visdom中的line()函數:

1) 畫一條直線

from visdom import Visdomimport numpy as npviz = 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 Visdomimport numpy as npviz = 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 Visdomimport numpy as npviz = Visdom(env=‘my_wind‘)x,y=0,0win = 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:utf8import visdomimport timeimport numpy as np class Visualizer(object): def __init__(self, env=‘default‘, **kwargs): self.vis = visdom.Visdom(env=env, www.yundingyuLe.cn**kwargs) self.index = {} def plot_many_stack(self, d): ‘‘‘ self.plot(www.yigou521.com‘loss‘,1.00) ‘‘‘ name=list(d.keys()) name_total=" ".join(name) x = self.index.get(name_www.thd540.com total, 0) val=list(d.values(www.baidu620.com/)) 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 Visualizerfrom 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

pytorch下可采用visidom作為可視化工具