使用環境:win10 ,在jupyter notebook下運行 谷歌瀏覽器
1、環境安裝
使用conda 安裝,打開anacond powershell,輸入pip install tensorboard ,然后安裝pip install tensorflow
2、使用操作
在終端或者環境命令行下,打開程序所在目錄,使用shift+右鍵進入cmd,輸入jupyter notebook,進入環境,打開程序。
(1)在程序開頭加入
from torch.utils.tensorboard import SummaryWriter,而不是from tensorboardX import SummaryWriter,參考https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html
(2)writer = SummaryWriter('runs/exp1'),runs/exp1表示相關信息存儲位置,可自行定義。然后調用相關函數即可。例如想知道訓練次數epoch與損失函數之間的關系,調用writer.add_scalar('Train Loss', train_loss / len(train_data), global_step=epoch) 。然后運行一次函數,等待程序運行完畢。
(3)打開runs文件夾的上一級目錄,然后使用shift+右鍵進入cmd,輸入tensorboard --logdir=runs ,隨后彈出如下
復制網址,然后打開(據說只能使用谷歌瀏覽器,未經驗證)。有可能出現如下提示,打開exp1文件夾,如果文件大小為0,則表示數據未成功寫入,重新運行程序即可。或者重新操作第三步
如果進入如下類似頁面,則表示成功
指令集補充
(1)add_scalar(tag, scalar_value, global_step=None, walltime=None)
功能:
在一個圖表中記錄一個標量的變化,常用於 Loss 和 Accuracy 曲線的記錄。
參數:
tag(string)- 該圖的標簽,類似於 polt.title。
scalar_value(float or string/blobname)- 用於存儲的值,曲線圖的 y 坐標
global_step(int)- 曲線圖的 x 坐標
walltime(float)- 為 event 文件的文件名設置時間,默認為 time.time()
(2)add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)
功能:
在一個圖表中記錄多個標量的變化,常用於對比,如 trainLoss 和 validLoss 的比較
等。
參數:
main_tag(string)- 該圖的標簽。
tag_scalar_dict(dict)- key 是變量的 tag, value 是變量的值。
global_step(int)- 曲線圖的 x 坐標
walltime(float)- 為 event 文件的文件名設置時間,默認為 time.time()
writer.add_scalars('result', {'Train Loss':train_loss / len(train_data),'Train Acc':train_acc / len(train_data),'Valid Loss':valid_loss / len(valid_data),'Valid Acc':valid_acc / len(valid_data)}, global_step=epoch)
類似上面代碼,其中result表示標題,train Loss等表示每條線名字,epoch表示x軸
(3)add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None)
功能:
繪制直方圖和多分位數折線圖,常用於監測權值及梯度的分布變化情況,便於診斷網
絡更新方向是否正確。
參數:
tag(string)- 該圖的標簽,類似於 polt.title。
values(torch.Tensor, numpy.array or string/blobname)- 用於繪制直方圖的值
global_step(int)- 曲線圖的 y 坐標
bins(string)- 決定如何取 bins,默認為‘tensorflow’ ,可選: ’auto’, ‘fd’ 等
walltime(float)- 為 event 文件的文件名設置時間,默認為 time.time()
(4)add_image(tag, img_tensor, global_step=None, walltime=None)
功能:
繪制圖片,可用於檢查模型的輸入,監測 feature map 的變化,或是觀察 weight。
參數:
tag(string)- 該圖的標簽,類似於 polt.title。
img_tensor(torch.Tensor,numpy.array, or string/blobname)- 需要可視化的圖片數
據, shape = [C,H,W]。
global_step(int)- x 坐標。
walltime(float)- 為 event 文件的文件名設置時間,默認為 time.time()。
通常會借助 torchvision.utils.make_grid() 將一組圖片繪制到一個窗口
(5)torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, ra
nge=None, scale_each=False, pad_value=0)
功能:
將一組圖片拼接成一張圖片,便於可視化。
參數:
tensor(Tensor or list)- 需可視化的數據, shape:(B x C x H x W) ,B 表示 batch 數,即
幾張圖片
nrow(int)- 一行顯示幾張圖,默認值為 8。
padding(int)- 每張圖片之間的間隔,默認值為 2。
normalize(bool)- 是否進行歸一化至(0,1)。
range(tuple)- 設置歸一化的 min 和 max,若不設置,默認從 tensor 中找 min 和 max。
scale_each(bool)- 每張圖片是否單獨進行歸一化,還是 min 和 max 的一個選擇。
pad_value(float)- 填充部分的像素值,默認為 0,即黑色。
(6)add_graph(model, input_to_model=None, verbose=False, **kwargs)
功能:
繪制網絡結構拓撲圖。
參數:
model(torch.nn.Module)- 模型實例
inpjt_to_model(torch.autograd.Variable)- 模型的輸入數據,可以生成一個隨機數,只
要 shape 符合要求即可
運行以下代碼:
import torch from torch import nn import numpy as np from torch.autograd import Variable from torchvision.datasets import CIFAR10 from datetime import datetime import os from torch.utils.tensorboard import SummaryWriter import torchvision.models as models import tensorflow as tf #定義網絡架構 class AlexNet(nn.Module): def __init__(self): super().__init__() # 第一層是 5x5 的卷積, 輸入的 channels 是 3,輸出的 channels 是 64, 步長是 1, 沒有 padding self.conv1 = nn.Sequential( nn.Conv2d(3, 64, 5), nn.ReLU(True)) # 第二層是 3x3 的池化, 步長是 2, 沒有 padding self.max_pool1 = nn.MaxPool2d(3 , 2) # 第三層是 5x5 的卷積, 輸入的 channels 是 64,輸出的 channels 是 64, 步長是 1, 沒有 padding self.conv2 = nn.Sequential( nn.Conv2d(64, 64, 5, 1), nn.ReLU(True)) # 第四層是 3x3 的池化,步長是 2,沒有 padding self.max_pool2 = nn.MaxPool2d(3, 2) # 第五層是全連接層,輸入是 1204,輸出是 384 self.fc1 = nn.Sequential( nn.Linear(1024, 384), nn.ReLU(True)) # 第六層是全連接層,輸入是 384,輸出是 192 self.fc2 = nn.Sequential( nn.Linear(384, 192), nn.ReLU(True)) # 第七層是全連接層,輸入是 192,輸出是 10 self.fc3 = nn.Linear(192, 10) def forward(self, x): x = self.conv1(x) x = self.max_pool1(x) x = self.conv2(x) x = self.max_pool2(x) # 將矩陣拉平 x = x.view(x.shape[0], -1) x = self.fc1(x) x = self.fc2(x) x = self.fc3(x) return x alexnet = AlexNet() writer = SummaryWriter('runs/exp1') dummy_input = Variable(torch.zeros(1, 3, 32, 32)) with writer: writer.add_graph(alexnet,dummy_input)
可在 GRAPHS 中看到 Resnet18 的網絡拓撲
雙擊AlexNet
(7)add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='de
fault', metadata_header=None)
功能:
在三維空間或二維空間展示數據分布,可選 T-SNE、 PCA 和 CUSTOM 方法。
參數
mat(torch.Tensor or numpy.array)- 需要繪制的數據,一個樣本必須是一個向量形式。
shape = (N,D), N 是樣本數, D 是特征維數。
metadata(list)- 數據的標簽,是一個 list,長度為 N。
label_img(torch.Tensor)- 空間中展示的圖片, shape = (N,C,H,W)。
global_step(int)- Global step value to record,不理解這里有何用處呢?知道的朋友補
充一下吧。
tag(string)- 標簽
(8)add_text(tag, text_string, global_step=None, walltime=None)
功能: 記錄文字
(9)add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None)
功能: 記錄 video
(10)add_figure(tag, figure, global_step=None, close=True, walltime=None)
功能: 添加 matplotlib 圖片到圖像中
(11)add_image_with_boxes(tag, img_tensor, box_tensor, global_step=None, walltime
=None, **kwargs)
功能: 圖像中繪制 Box,目標檢測中會用到
(12)add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, w
eights=None, walltime=None)
功能: 繪制 PR 曲線
(13)add_pr_curve_raw(tag, true_positive_counts, false_positive_counts, true_negati
ve_counts, false_negative_counts, precision, recall, global_step=None, num_thres
holds=127, weights=None, walltime=None)
功能: 從原始數據上繪制 PR 曲線
(14)export_scalars_to_json(path)
功能: 將 scalars 信息保存到 json 文件,便於后期使用
注意:沒有驗證或者驗證有問題參考官方鏈接