目錄
- 一、什么是Tensorboard
- 二、配置Tensorboard
- 環境要求
- 安裝
- 三、Tensorboard的使用
- 使用各種add方法記錄資料
- 單條曲線(scalar)
- 多條曲線(scalars)
- 直方圖(histogram)
- 圖片(image)
- 渲染(figure)
- 網路(graph)
- 其他
- 三、結語
一、什么是Tensorboard
Tensorboard原本是Google TensorFlow的可視化工具,可以用于記錄訓練資料、評估資料、網路結構、影像等,并且可以在web上展示,對于觀察神經網路的程序非常有幫助,PyTorch也推出了自己的可視化工具,一個是tensorboardX包,一個是torch.utils.tensorboard,二者的使用相差不大,這里介紹后者
二、配置Tensorboard
環境要求
- 作業系統:Windows
- Python3
- PyTorch >= 1.0.0 && torchvision >= 0.2.1 && tensorboard >= 1.12.0 1
安裝
注: 雖說PyTorch中直接有tensorboard的包,但是有時用的時候還是會報錯,所以安裝TensorFlow之后torch.utils.tensorboard就可以直接使用且穩定,所以這里介紹安裝TensorFlow的方法,
- pip環境(相對麻煩需要下載依賴項)
pip install tensorflow_gpu=2.5.0 -i https://pypi.mirrors.ustc.edu.cn/simple/
pip install six numpy wheel
pip install keras_applications=1.0.6 --no-deps
pip install keras_preprocessing=1.0.5 --no-deps
- conda環境安裝
conda install --channel https://conda.anaconda.org/anaconda tensorflow=2.5.0
三、Tensorboard的使用
首先展示該包的使用的大致流程
1)匯入tensorboard,實體化SummaryWriter類,指明記錄日記路徑等資訊
from torch.utils.tensorboard import SummaryWriter
#實體化SummaryWriter,并指明日志存放路徑,在當前目錄如果每月logs目錄將自動創建
#如果不寫log_dir,系統將會創建runs目錄
writer = SummaryWriter(log_dir = ‘logs’)
#呼叫實體
writer.add_xxx()
#關閉writer
writer.close()
2)呼叫相應的API,介面一般格式為:
add_xxx(tag_name, object, iteration-number)
3)啟動tensorboard,在命令列中輸入
tensorboard --logdir=r’加logs所在路徑’
4)復制網址在瀏覽器中打開
使用各種add方法記錄資料
單條曲線(scalar)
add_scalar(tag, scalar_value, global_step=None, walltime=None)
引數:
- tag ( string ) – 資料識別符號
- scalar_value ( float或string/blobname ) – 要保存的值
- global_step ( int ) – 要記錄的全域步長值
- walltime ( float ) – 記錄訓練的時間,默認 walltime (time.time()) 秒
- new_style ( boolean ) – 是使用新樣式(張量欄位)還是舊樣式(simple_value 欄位),新樣式可能會導致更快的資料加載,
例子:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
writer = SummaryWriter()
for x in range(1, 101) :
writer.add_scalar('y = 2x', x, 2 * x)
writer.close()
效果

多條曲線(scalars)
add_scalars( main_tag , tag_scalar_dict , global_step = None , walltime = None)
引數
- main_tag ( string ) – 標簽的父名稱
- tag_scalar_dict ( dict ) – 存盤標簽和對應值的鍵值對
- global_step ( int ) – 要記錄的全域步長值
- walltime ( float ) – 記錄訓練的時間,默認 walltime (time.time()) 秒
例子:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
writer = SummaryWriter()
r = 5
for x in range(1, 101) :
writer.add_scalars('run_14h', {'xsinx' : x * np.sin(x / r),
'xcosx' : x * np.cos(x / r),
'xtanx' : x * np.tan(x / r)}, x)
writer.close()
效果:

直方圖(histogram)
add_histogram( tag , values , global_step = None , bins = ‘tensorflow’ , walltime = None , max_bins = None )
引數:
- tag ( string ) – 資料識別符號
- 值(torch.Tensor、numpy.array或string/blobname)– 構建直方圖的值
- global_step ( int ) – 要記錄的全域步長值
- bins ( string ) – {‘tensorflow’,‘auto’, ‘fd’, …} 之一,這決定了柱的制作方式,
- walltime ( float ) – 記錄訓練的時間,默認 walltime (time.time()) 秒
例子:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
writer = SummaryWriter()
for step in range(10) :
x = np.random.randn(1000)
writer.add_histogram('distribution of gaussion', x, step)
writer.close()
效果:

圖片(image)
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats = ‘CHW’)
引數:
- tag ( string ) – 資料識別符號
- img_tensor ( torch.Tensor , numpy.array , or string/blobname ) – 影像資料
- global_step ( int ) – 要記錄的全域步長值
- walltime ( float ) – 記錄訓練的時間,默認 walltime (time.time()) 秒
例子:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
import cv2 as cv
import torch
img = cv.imread('zhou.jpg', cv.IMREAD_COLOR)#輸入影像要是3通道的,所以讀取彩色影像
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
img = torch.tensor(img.transpose(2, 0, 1))#cv讀取為numpy影像為(H * W * C),所以要進行軸轉換
writer.add_image('zhou_ge', img, 0)
writer.close()
效果:

渲染(figure)
add_figure( tag , figure , global_step = None , close = True , walltime = None )
引數:
- tag ( string ) – 資料識別符號
- image( matplotlib.pyplot.figure ) – 圖或圖串列
- global_step ( int ) – 要記錄的全域步長值
- close ( bool ) – 自動關閉圖形的標志
- walltime ( float ) – 記錄訓練的時間,默認 walltime (time.time()) 秒
例子:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
import matplotlib.pyplot as plt
%matplotlib
writer = SummaryWriter()
x = np.linspace(0, 10, 1000)
y = np.sin(x)
figure1 = plt.figure()
plt.plot(x, y, 'r-')
writer.add_figure('my_figure', figure1, 0)
writer.close()
效果:

網路(graph)
add_graph(model, input_to_model=None, verbose=False, use_strict_trace = True)
引數:
- model( torch.nn.Module ) – 要繪制的模型,
- input_to_model ( torch.Tensor or list of torch.Tensor ) – 要輸入的變數或變數元組
- verbose(bool)– 是否在控制臺中列印圖形結構,
- use_strict_trace ( bool ) – 是否將關鍵字引數嚴格傳遞給 torch.jit.trace,當您希望跟蹤器記錄您的可變容器型別(串列、字典)時傳遞 False.
例子:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
import torch
import torch.nn as nn
writer = SummaryWriter()
class MLP(nn.Module) :
def __init__(self):
super(MLP, self).__init__()
self.Net = nn.Sequential(
nn.Linear(784, 512),
nn.ReLU(),
nn.Linear(512, 128),
nn.ReLU(),
nn.Linear(128, 10)
)
def forward(self, input):
input = input.view(-1, 28 * 28)
return self.Net(input)
model = MLP()
input = torch.FloatTensor(np.random.rand(32, 1, 28, 28))
writer.add_graph(model, input)
writer.close()
效果:


其他
嵌入:
add_embedding(mat, metadata=None, label_img=None, global_step = None, tag=‘default’, metadata_header=None)
引數:
- mat ( torch.Tensor or numpy.array ) – 一個矩陣,每一行都是資料點的特征向量
- metadata ( list ) – 標簽串列,每個元素都將轉換為字串
- label_img ( torch.Tensor ) – 影像對應每個資料點
- global_step ( int ) – 要記錄的全域步長值
- tag ( string ) – 嵌入的名稱
三、結語
以上是關于一些tensorboard可視化的操作,如果您有識訓的話,就給👨一個三連,就此謝過!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/356892.html
標籤:AI
