學習總結
(1)一開始遇到了報錯AttributeError: module 'visdom' has no attribute 'Visdom',后來發現是因為我將檔案命名成了visdom.py,導致代碼內調包時參考了同級目錄內的檔案,所以把檔案名改了就好了,
(2)另外pytorch中對于網路結構/訓練程序的可視化可以使用HiddenLayer、PyTorchViz等庫,可以學習這一篇:PyTorch下的可視化工具(網路結構/訓練程序可視化),
文章目錄
- 學習總結
- 一、初識寶藏visdom
- 二、一個sinx栗子
- 三、常見功能
- 3.1 line操作
- 3.2 image操作
- 3.3 text操作
- 四、保存
一、初識寶藏visdom
visdom是Facebook專門為Pytorch開發的一款可視化工具,通過官網介紹(http://github.com/facebookresearch/visdom)介紹它能搞定大多數科學運算(處理數值、影像、文本甚至是視頻)的可視化任務,visdom支持pytorch、Torch和Numpy,
(1)通過pip install visdom即可完成visdom的安裝,
(2)我們要啟動visdom服務器:
運行命令:python -m visdom.server 或 通過nohup python -m visdom.server &命令將服務放至后臺運行,
visdom服務是一個web server服務,默認系結8097埠(客戶端和服務端之間通過tornado進行非阻塞互動),所以我們要在地址欄中輸入:http://localhost:8097/ ,
二、一個sinx栗子
通過vis = visdom.Visdom(env = 'test1')構建一個客戶端物件vis,該物件可以使用如下常見的畫圖函式:
line:類似matlab中的plot操作,可以記錄某些標量的變化,例如損失、準確率等,
image:可視化圖片,如輸入的圖片或者GAN生成的圖片,也可以是卷積核的資訊,
text:記錄日志等文字資訊,支持HTML格式,
histgram:可視化分布,查資料、引數的分布,
scatter:繪制散點圖,
bar:繪制柱狀圖,
pie:繪制餅狀圖,
# -*- coding: utf-8 -*-
"""
Created on Mon Oct 25 20:15:55 2021
@author: 86493
"""
# %%sh
# 啟動visdom服務器
# nohup python -m visdom.server &
import visdom
import torch as t
# 新建一個連接客戶端
# 構建一個客戶端,指定env = u'test1',默認埠為8097,host是'localhost'
# 還能指定host, port等引數
vis = visdom.Visdom(env = 'test1')
x = t.arange(1, 30, 0.01)
y = t.sin(x)
vis.line(X = x, Y = y, win = 'sinx', opts = {'title': 'y = sin(x)'})
在剛才打開的 http://localhost:8097/ 中我們選擇對應的環境(這里是test1)就能顯示sinx的影像了,

三、常見功能
3.1 line操作
Visdom同時支持PyTorch的tensor和Numpy的ndarray兩種資料結構,但不支持Python的int、float等型別,因此每次傳入時都需先將資料轉成ndarray或tensor,上述操作的引數一般不同,但有兩個引數是絕大多數操作都具備的:
- win:用于指定pane的名字,如果不指定,visdom將自動分配一個新的pane,如果兩次操作指定的win名字一樣,新的操作將覆寫當前pane的內容,因此最好每次操作都重新指定win,
- opts:選項,接收一個字典,常見的option包括
title、xlabel、ylabel、width等,主要用于設定pane的顯示格式,
因為visdom每次操作都會覆寫之前的數值,但往往我們在訓練網路的程序中需不斷更新數值,如損失值等,這時就需要指定引數update='append'來避免覆寫之前的數值,而除了使用update引數以外,還可以使用vis.updateTrace方法來更新圖,但updateTrace不僅能在指定pane上新增一個和已有資料相互獨立的Trace,還能像update='append'那樣在同一條trace上追加資料,
# append 追加資料
for ii in range(0, 10):
# y = x
x = t.Tensor([ii])
y = x
vis.line(X=x, Y=y, win='polynomial', update='append' if ii>0 else None)
# updateTrace 新增一條線
x = t.arange(0, 9, 0.1)
y = (x ** 2) / 9
vis.line(X=x, Y=y, win='polynomial', name='this is a new Trace',update='new')
在剛才網址里就出現另一個pane的圖:

3.2 image操作
image的畫圖功能可分為如下兩類:
image接收一個二維或三維向量, H × W H\times W H×W或 3 × H × W 3 \times H\times W 3×H×W,前者是黑白影像,后者是彩色影像,images接收一個四維向量 N × C × H × W N\times C\times H\times W N×C×H×W, C C C可以是1或3,分別代表黑白和彩色影像,可實作類似torchvision中make_grid的功能,將多張圖片拼接在一起,images也可以接收一個二維或三維的向量,此時它所實作的功能與image一致,
# 可視化一個隨機的黑白圖片
vis.image(t.randn(64, 64).numpy())
# 隨機可視化一張彩色圖片
vis.image(t.randn(3, 64, 64).numpy(), win='random2')
# 可視化36張隨機的彩色圖片,每一行6張
vis.images(t.randn(36, 3, 64, 64).numpy(),
nrow=6,
win='random3',
opts={'title':'random_imgs'})



3.3 text操作
vis.text用于可視化文本,支持所有的html標簽,同時也遵循著html的語法標準,例如,換行需使用<br>標簽,\r\n無法實作換行,
# (三)text用法
vis.text(u'''<h1>Hello Visdom</h1><br>Visdom是Facebook專門為<b>PyTorch</b>開發的一個可視化工具,
在內部使用了很久,在2017年3月份開源了它,
Visdom十分輕量級,但是卻有十分強大的功能,支持幾乎所有的科學運算可視化任務''',
win='visdom',
opts={'title': u'visdom簡介' }
)

四、保存
最上方的save按鈕,可將當前的env保存成json檔案,默認保存路徑在~/.visdom/目錄下(一般是C盤的user檔案夾下),
更多關于visdom的用法可以參考——http://github.com/facebookresearch/visdom,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/337585.html
標籤:AI
上一篇:LSTM詳解
