Pytorch学习-tensorboard的使用
Pytorch學習-tensorboard的使用
- 1 Tensorboard簡介
- 運行機制
- 安裝及測試
- 2 SummaryWriter實例的使用教程
- (1)初始化summaryWriter的方法
- (2)不同類型數據的記錄
- 1)數字 scalar
- 使用樣例
- 2) 直方圖 histogram
- 使用樣例
- 3) 運行圖 graph !!
- 官方樣例
- 4) 圖片 image (pillow庫支持)
- 5) 嵌入向量embedding
1 Tensorboard簡介
參考鏈接1安裝:
參考鏈接2使用:
TensorBoard:TensorFlow中強大的可視化工具;
支持標量、圖像、文本、音頻、視頻和Embedding等多種數據可視化;
運行機制
安裝及測試
終端輸入命令 pip install tensorboard 以及 pip install future,安裝完成即可。
1) 先運行下面的代碼,得到event 文件
2)在terminal輸入 命令 :
tensorboard --logdir=./runs得到類似以下輸出:
TensorBoard 2.1.1 at http://localhost:6006/ (Press CTRL+C to quit)打開對應網站即可看到可視化界面
2 SummaryWriter實例的使用教程
(1)初始化summaryWriter的方法
使用過程:
對于每次實驗建立一個路徑不同的summaryWriter,也叫一個run
接下來,調用summaryWriter中的不同實例中的add_something方法向日志中寫入文件
如果想要可視化這些數據,在命令行中開啟tensorboard即可:tensorboard --logdir=<your_log_dir>
其中,<your_log_dir> 可以是單個run的路徑,也可以是父目錄,底下含有多個子文件夾,可以在可視化界面橫向的比較runs/下面的不同次實驗得到的數據的差異。
(2)不同類型數據的記錄
1)數字 scalar
使用add_scalar 方法記錄數字常量,如訓練過程中的loss,accuracy、learning_rate等,監(jiān)控訓練過程
add_scalar(tag, scalar_value, global_step=None, walltime=None)參數
- tag(string) 數據名稱,不同名稱的數據使用不同曲線展示
- scalar_value(float) 數字常量值 必須為float類型
- global_step(int,optional):訓練的step
- walltime(float,optional) 記錄發(fā)生的時間,默認為time.time()
注意:如果為pytorch scalar tensor 需要調用.item()方法獲取其數值
使用樣例
在’runs/scalar_example‘和‘runs/another_scalar_example’兩個不同目錄中記錄名稱相同但是參數不同的兩個二次函數和指數函數數據,效果如下圖。
from tensorboardX import SummaryWriter writer = SummaryWriter('runs/scalar_example') # 寫入的目錄 for i in range(10):writer.add_scalar('quadratic',i**2,global_step=i)writer.add_scalar('exponential',2**i,global_step=i)writer = SummaryWriter('runs/another_scalar_example') # 在另一個路徑中寫 for i in range(10):writer.add_scalar('quadratic',i**3,global_step=i)writer.add_scalar('exponential',3**i,global_step=i)執(zhí)行命令 tensorboard --logdir=./policy_save/runs/ 后打開網頁 【定位到公共在一起的目錄】
可以看到,兩個名稱相同的數據被放在同一張圖中,便于對比觀察。可以在左側runs欄選擇要查看哪些變量
2) 直方圖 histogram
使用add_histogram方法記錄一組數據的直方圖
**add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)**參數:
- tag(string) 數據名稱,不同名稱的數據使用不同曲線展示
- values(torch.Tensor,numpy.array, or string / blobname): 用來構建直方圖的數據
- global_step(int,optional):訓練的step
- bins(string,optional):取值有‘tensorflow’,‘auto’,’fd’等 該參數決定了分桶的方式??。
- walltime(float,optional) 記錄發(fā)生的時間,默認為time.time()
- max_bins(int,optional):最大分桶數
使用樣例
import numpy as np writer = SummaryWriter('runs/embedding_example') writer.add_histogram('normal_centered',np.random.normal(0,1,1000),global_step=1) writer.add_histogram('normal_centered',np.random.normal(0,2,1000),global_step=50) writer.add_histogram('normal_centered',np.random.normal(0,3,1000),global_step=100)結果圖:
可以看到有"DISTRIBUTIONS"和"HISTOGRAMS"兩欄,它們都是用來觀察數據分布的。其中在"HISTOGRAMS"中,同一數據不同 step 時候的直方圖可以上下錯位排布 (OFFSET) 也可重疊排布 (OVERLAY)。
3) 運行圖 graph !!
使用add_graph方法來可視化一個神經網絡
**add_graph(model, input_to_model=None, verbose=False, **kwargs)**參數:
- model(torch.nn.Module):待可視化的網絡模型
- input_to_model(torch.Tensor or list of torch.Tensor, optional):待輸入神經網絡的變量或一組變量
官方樣例
import torch import torch.nn as nn from tensorboardX import SummaryWriterclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()self.conv1 = nn.Sequential( # input_size=(1*28*28)nn.Conv2d(1, 6, 5, 1, 2),nn.ReLU(), # (6*28*28)nn.MaxPool2d(kernel_size=2, stride=2), # output_size=(6*14*14))self.conv2 = nn.Sequential(nn.Conv2d(6, 16, 5),nn.ReLU(), # (16*10*10)nn.MaxPool2d(2, 2) # output_size=(16*5*5))self.fc1 = nn.Sequential(nn.Linear(16 * 5 * 5, 120),nn.ReLU())self.fc2 = nn.Sequential(nn.Linear(120, 84),nn.ReLU())self.fc3 = nn.Linear(84, 10)# 定義前向傳播過程,輸入為xdef forward(self, x):x = self.conv1(x)x = self.conv2(x)# nn.Linear()的輸入輸出都是維度為一的值,所以要把多維度的tensor展平成一維x = x.view(x.size()[0], -1)x = self.fc1(x)x = self.fc2(x)x = self.fc3(x)return xdummy_input = torch.rand(13, 1, 28, 28) # 假設輸入13張1*28*28的圖片 model = LeNet() with SummaryWriter('runs/graph') as w:w.add_graph(model, dummy_input)writer = SummaryWriter('policy_save/runs/scalar_example') for i in range(100):writer.add_scalar('quadratic', i * 2, global_step=i)writer.add_scalar('exponential', 1.2 * i, global_step=i)writer = SummaryWriter('policy_save/runs/another_scalar_example') for i in range(100):writer.add_scalar('quadratic', i**2, global_step=i)writer.add_scalar('exponential', 1.2**i, global_step=i)終端輸入命令:tensorboard --logdir=./runs/graph 點擊網頁查看可視化界面
4) 圖片 image (pillow庫支持)
5) 嵌入向量embedding
總結
以上是生活随笔為你收集整理的Pytorch学习-tensorboard的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch学习-torch.max(
- 下一篇: Pytorch学习 - Task5 Py