• 文件 >
  • torch.utils.tensorboard
捷徑

torch.utils.tensorboard

在深入探討之前,可以在 https://tensorflow.dev.org.tw/tensorboard/ 找到更多關於 TensorBoard 的詳細資訊

一旦您安裝了 TensorBoard,這些實用程式可讓您將 PyTorch 模型和指標記錄到目錄中,以便在 TensorBoard UI 中進行視覺化。 純量、圖像、直方圖、圖形和嵌入視覺化都支援 PyTorch 模型和 Tensor,以及 Caffe2 網路和 Blob。

SummaryWriter 類別是您記錄資料以供 TensorBoard 使用和視覺化的主要入口。 例如

import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter
from torchvision import datasets, transforms

# Writer will output to ./runs/ directory by default
writer = SummaryWriter()

transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
trainset = datasets.MNIST('mnist_train', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
model = torchvision.models.resnet50(False)
# Have ResNet model take in grayscale rather than RGB
model.conv1 = torch.nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
images, labels = next(iter(trainloader))

grid = torchvision.utils.make_grid(images)
writer.add_image('images', grid, 0)
writer.add_graph(model, images)
writer.close()

然後可以使用 TensorBoard 對其進行視覺化,TensorBoard 應該可以使用以下方式安裝和執行

pip install tensorboard
tensorboard --logdir=runs

可以為一個實驗記錄大量資訊。 為了避免 UI 雜亂並獲得更好的結果集群,我們可以按層次結構命名繪圖來對其進行分組。 例如,“Loss/train”和“Loss/test”將分組在一起,而“Accuracy/train”和“Accuracy/test”將在 TensorBoard 介面中單獨分組。

from torch.utils.tensorboard import SummaryWriter
import numpy as np

writer = SummaryWriter()

for n_iter in range(100):
    writer.add_scalar('Loss/train', np.random.random(), n_iter)
    writer.add_scalar('Loss/test', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)

預期結果

_images/hier_tags.png


class torch.utils.tensorboard.writer.SummaryWriter(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix='')[source][source]

將條目直接寫入 log_dir 中的事件檔案,以供 TensorBoard 使用。

SummaryWriter 類別提供高階 API,以便在給定的目錄中建立事件檔案,並將摘要和事件新增至其中。此類別會非同步更新檔案內容。這允許訓練程式呼叫方法,直接從訓練迴圈將資料新增至檔案,而不會減慢訓練速度。

__init__(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix='')[source][source]

建立一個 SummaryWriter,它會將事件和摘要寫出到事件檔案。

參數
  • log_dir (str) – 儲存目錄位置。預設值為 runs/CURRENT_DATETIME_HOSTNAME,每次執行後都會變更。使用階層式資料夾結構可以輕鬆比較各次執行。例如,為每個新實驗傳入 'runs/exp1'、'runs/exp2' 等,以便跨實驗進行比較。

  • comment (str) – 附加到預設 log_dir 的註解 log_dir 後綴。如果已指定 log_dir,則此引數無效。

  • purge_step (int) – 當記錄在步驟 T+XT+X 當機,並在步驟 TT 重新啟動時,global_step 大於或等於 TT 的任何事件都將被清除,並從 TensorBoard 中隱藏。請注意,當機並恢復的實驗應該具有相同的 log_dir

  • max_queue (int) – 在其中一個 'add' 呼叫強制刷新到磁碟之前,用於擱置事件和摘要的佇列大小。預設值為十個項目。

  • flush_secs (int) – 將擱置事件和摘要刷新到磁碟的頻率(以秒為單位)。預設值為每兩分鐘一次。

  • filename_suffix (str) – 附加到 log_dir 目錄中所有事件檔案名稱的後綴。有關檔案名稱建構的更多詳細資訊,請參閱 tensorboard.summary.writer.event_file_writer.EventFileWriter。

範例

from torch.utils.tensorboard import SummaryWriter

# create a summary writer with automatically generated folder name.
writer = SummaryWriter()
# folder location: runs/May04_22-14-54_s-MacBook-Pro.local/

# create a summary writer using the specified folder name.
writer = SummaryWriter("my_experiment")
# folder location: my_experiment

# create a summary writer with comment appended.
writer = SummaryWriter(comment="LR_0.1_BATCH_16")
# folder location: runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/
add_scalar(tag, scalar_value, global_step=None, walltime=None, new_style=False, double_precision=False)[source][source]

將純量資料新增至摘要。

參數
  • tag (str) – 資料識別碼

  • scalar_value (float字串/blobname) – 要儲存的值

  • global_step (int) – 要記錄的全域步驟值

  • walltime (float) – 可選,用事件的 epoch 後秒數覆寫預設的 walltime (time.time())

  • new_style (boolean) – 是否使用新樣式(張量欄位)或舊樣式(simple_value 欄位)。新樣式可能會加快資料載入速度。

範例

from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
x = range(100)
for i in x:
    writer.add_scalar('y=2x', i * 2, i)
writer.close()

預期結果

_images/add_scalar.png
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)[原始碼][原始碼]

將多個純量資料加入摘要。

參數
  • main_tag (str) – 標籤的父名稱

  • tag_scalar_dict (dict) – 儲存標籤和相應值的鍵值對

  • global_step (int) – 要記錄的全域步驟值

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

範例

from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
r = 5
for i in range(100):
    writer.add_scalars('run_14h', {'xsinx':i*np.sin(i/r),
                                    'xcosx':i*np.cos(i/r),
                                    'tanx': np.tan(i/r)}, i)
writer.close()
# This call adds three values to the same scalar plot with the tag
# 'run_14h' in TensorBoard's scalar section.

預期結果

_images/add_scalars.png
add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)[原始碼][原始碼]

將直方圖加入摘要。

參數

範例

from torch.utils.tensorboard import SummaryWriter
import numpy as np
writer = SummaryWriter()
for i in range(10):
    x = np.random.random(1000)
    writer.add_histogram('distribution centers', x + i, i)
writer.close()

預期結果

_images/add_histogram.png
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')[原始碼][原始碼]

將圖片資料加入摘要。

請注意,這需要 pillow 套件。

參數
  • tag (str) – 資料識別碼

  • img_tensor (torch.Tensor, numpy.ndarray, 或 string/blobname) – 圖片資料

  • global_step (int) – 要記錄的全域步驟值

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

  • dataformats (str) – 圖片資料格式規範,形式為 CHW、HWC、HW、WH 等。

形狀

img_tensor:預設為 (3,H,W)(3, H, W)。 你可以使用 torchvision.utils.make_grid() 將一批張量轉換為 3xHxW 格式,或呼叫 add_images 並讓我們完成這項工作。 具有 (1,H,W)(1, H, W), (H,W)(H, W), (H,W,3)(H, W, 3) 的張量也適合,只要傳遞相應的 dataformats 參數,例如 CHWHWCHW

範例

from torch.utils.tensorboard import SummaryWriter
import numpy as np
img = np.zeros((3, 100, 100))
img[0] = np.arange(0, 10000).reshape(100, 100) / 10000
img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000

img_HWC = np.zeros((100, 100, 3))
img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000
img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000

writer = SummaryWriter()
writer.add_image('my_image', img, 0)

# If you have non-default dimension setting, set the dataformats argument.
writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')
writer.close()

預期結果

_images/add_image.png
add_images(tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW')[source][source]

將批次圖片資料加入摘要。

請注意,這需要 pillow 套件。

參數
  • tag (str) – 資料識別碼

  • img_tensor (torch.Tensor, numpy.ndarray, 或 string/blobname) – 圖片資料

  • global_step (int) – 要記錄的全域步驟值

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

  • dataformats (str) – 圖片資料格式規範,形式為 NCHW、NHWC、CHW、HWC、HW、WH 等。

形狀

img_tensor: 預設為 (N,3,H,W)(N, 3, H, W)。如果指定了 dataformats,則接受其他形狀。例如 NCHW 或 NHWC。

範例

from torch.utils.tensorboard import SummaryWriter
import numpy as np

img_batch = np.zeros((16, 3, 100, 100))
for i in range(16):
    img_batch[i, 0] = np.arange(0, 10000).reshape(100, 100) / 10000 / 16 * i
    img_batch[i, 1] = (1 - np.arange(0, 10000).reshape(100, 100) / 10000) / 16 * i

writer = SummaryWriter()
writer.add_images('my_image_batch', img_batch, 0)
writer.close()

預期結果

_images/add_images.png
add_figure(tag, figure, global_step=None, close=True, walltime=None)[source][source]

將 matplotlib 圖形渲染成圖片並將其加入摘要。

請注意,這需要 matplotlib 套件。

參數
  • tag (str) – 資料識別碼

  • figure (Union[Figure, List[Figure]]) – 圖形或圖形列表

  • global_step (Optional[int]) – 要記錄的全域步數值

  • close (bool) – 自動關閉圖形的標誌

  • walltime (Optional[float]) – 可選地覆蓋事件 epoch 後的預設 walltime (time.time()) 秒數

add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None)[source][source]

將影片資料加入摘要。

請注意,這需要 moviepy 套件。

參數
  • tag (str) – 資料識別碼

  • vid_tensor (torch.Tensor) – 影片資料

  • global_step (int) – 要記錄的全域步驟值

  • fps (floatint) – 每秒幀數

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

形狀

vid_tensor: (N,T,C,H,W)(N, T, C, H, W)。對於 uint8 類型,值應位於 [0, 255] 範圍內;對於 float 類型,值應位於 [0, 1] 範圍內。

add_audio(tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None)[source][source]

將音訊資料加入摘要。

參數
  • tag (str) – 資料識別碼

  • snd_tensor (torch.Tensor) – 音訊資料

  • global_step (int) – 要記錄的全域步驟值

  • sample_rate (int) – 採樣率(以赫茲為單位)

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

形狀

snd_tensor: (1,L)(1, L)。值應介於 [-1, 1] 之間。

add_text(tag, text_string, global_step=None, walltime=None)[原始碼][原始碼]

新增文字資料到 summary。

參數
  • tag (str) – 資料識別碼

  • text_string (str) – 要儲存的字串

  • global_step (int) – 要記錄的全域步驟值

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

範例

writer.add_text('lstm', 'This is an lstm', 0)
writer.add_text('rnn', 'This is an rnn', 10)
add_graph(model, input_to_model=None, verbose=False, use_strict_trace=True)[原始碼][原始碼]

新增圖形資料到 summary。

參數
  • model (torch.nn.Module) – 要繪製的模型。

  • input_to_model (torch.Tensorlisttorch.Tensor) – 要餵入的變數或變數元組。

  • verbose (bool) – 是否要在主控台中印出圖形結構。

  • use_strict_trace (bool) – 是否要將關鍵字引數 strict 傳遞給 torch.jit.trace。當您希望追蹤器記錄您的可變容器類型(list、dict)時,傳遞 False

add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)[原始碼][原始碼]

新增 embedding projector 資料到 summary。

參數
  • mat (torch.Tensornumpy.ndarray) – 一個矩陣,其中每一列是資料點的特徵向量

  • metadata (list) – 標籤列表,每個元素將被轉換為字串

  • label_img (torch.Tensor) – 對應於每個資料點的圖像

  • global_step (int) – 要記錄的全域步驟值

  • tag (str) – embedding 的名稱

  • metadata_header (list) – 多欄 metadata 的標頭列表。 如果給定,則每個 metadata 必須是一個列表,其值對應於標頭。

形狀

mat: (N,D)(N, D), 其中 N 是資料數量,D 是特徵維度

label_img: (N,C,H,W)(N, C, H, W)

範例

import keyword
import torch
meta = []
while len(meta)<100:
    meta = meta+keyword.kwlist # get some strings
meta = meta[:100]

for i, v in enumerate(meta):
    meta[i] = v+str(i)

label_img = torch.rand(100, 3, 10, 32)
for i in range(100):
    label_img[i]*=i/100.0

writer.add_embedding(torch.randn(100, 5), metadata=meta, label_img=label_img)
writer.add_embedding(torch.randn(100, 5), label_img=label_img)
writer.add_embedding(torch.randn(100, 5), metadata=meta)

注意

如果類別(即非數字)metadata 要用於 embedding projector 中的著色,則不能有超過 50 個唯一值。

add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None)[source][source]

加入精確率-召回率曲線。

繪製精確率-召回率曲線讓您了解您的模型在不同閾值設定下的效能。使用此函數,您可以為每個目標提供真實標籤 (T/F) 和預測置信度(通常是模型的輸出)。 TensorBoard UI 將讓您以互動方式選擇閾值。

參數
  • tag (str) – 資料識別碼

  • labels (torch.Tensor, numpy.ndarray, or string/blobname) – 真實數據。每個元素的二元標籤。

  • predictions (torch.Tensor, numpy.ndarray, or string/blobname) – 元素被分類為真的機率。數值應在 [0, 1] 之間。

  • global_step (int) – 要記錄的全域步驟值

  • num_thresholds (int) – 用於繪製曲線的閾值數量。

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

範例

from torch.utils.tensorboard import SummaryWriter
import numpy as np
labels = np.random.randint(2, size=100)  # binary label
predictions = np.random.rand(100)
writer = SummaryWriter()
writer.add_pr_curve('pr_curve', labels, predictions, 0)
writer.close()
add_custom_scalars(layout)[source][source]

通過在 'scalars' 中收集圖表標籤來建立特殊圖表。

注意:每個 SummaryWriter() 物件只能呼叫此函數一次。

由於它只提供 metadata 給 tensorboard,因此可以在訓練迴圈之前或之後呼叫此函數。

參數

layout (dict) – {categoryName: charts},其中 charts 也是一個字典 {chartName: ListOfProperties}。 ListOfProperties 中的第一個元素是圖表的類型(MultilineMargin 其中之一),第二個元素應該是一個包含您在 add_scalar 函數中使用的標籤的列表,這些標籤將被收集到新圖表中。

範例

layout = {'Taiwan':{'twse':['Multiline',['twse/0050', 'twse/2330']]},
             'USA':{ 'dow':['Margin',   ['dow/aaa', 'dow/bbb', 'dow/ccc']],
                  'nasdaq':['Margin',   ['nasdaq/aaa', 'nasdaq/bbb', 'nasdaq/ccc']]}}

writer.add_custom_scalars(layout)
add_mesh(tag, vertices, colors=None, faces=None, config_dict=None, global_step=None, walltime=None)[source][source]

將網格或 3D 點雲加入 TensorBoard。

該可視化基於 Three.js,因此它允許使用者與渲染的物件互動。除了基本的定義(例如頂點、面)之外,使用者還可以進一步提供相機參數、光照條件等。請查看 https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene 以獲得進階用法。

參數
  • tag (str) – 資料識別碼

  • vertices (torch.Tensor) – 頂點的 3D 坐標列表。

  • colors (torch.Tensor) – 每個頂點的顏色

  • faces (torch.Tensor) – 每個三角形內頂點的索引。(可選)

  • config_dict – 具有 ThreeJS 類別名稱和配置的字典。

  • global_step (int) – 要記錄的全域步驟值

  • walltime (float) – 可選的覆寫預設 walltime(time.time())事件的 epoch 之後的秒數

形狀

vertices: (B,N,3)(B, N, 3). (批次大小, 頂點數量, 通道數)

colors: (B,N,3)(B, N, 3). 對於 uint8 類型,值應位於 [0, 255] 範圍內;對於 float 類型,值應位於 [0, 1] 範圍內。

faces: (B,N,3)(B, N, 3). 對於 uint8 類型,值應位於 [0, 頂點數量] 範圍內。

範例

from torch.utils.tensorboard import SummaryWriter
vertices_tensor = torch.as_tensor([
    [1, 1, 1],
    [-1, -1, 1],
    [1, -1, -1],
    [-1, 1, -1],
], dtype=torch.float).unsqueeze(0)
colors_tensor = torch.as_tensor([
    [255, 0, 0],
    [0, 255, 0],
    [0, 0, 255],
    [255, 0, 255],
], dtype=torch.int).unsqueeze(0)
faces_tensor = torch.as_tensor([
    [0, 2, 3],
    [0, 3, 1],
    [0, 1, 2],
    [1, 3, 2],
], dtype=torch.int).unsqueeze(0)

writer = SummaryWriter()
writer.add_mesh('my_mesh', vertices=vertices_tensor, colors=colors_tensor, faces=faces_tensor)

writer.close()
add_hparams(hparam_dict, metric_dict, hparam_domain_discrete=None, run_name=None, global_step=None)[source][source]

將一組超參數新增到 TensorBoard 中以進行比較。

參數
  • hparam_dict (dict) – 字典中的每個鍵值對都是超參數的名稱及其對應的值。值的類型可以是 boolstringfloatintNone 其中之一。

  • metric_dict (dict) – 字典中的每個鍵值對都是指標的名稱及其對應的值。請注意,此處使用的鍵在 tensorboard 記錄中應該是唯一的。否則,您透過 add_scalar 新增的值將顯示在 hparam 外掛程式中。在大多數情況下,這是不需要的。

  • hparam_domain_discrete – (Optional[Dict[str, List[Any]]]) 一個字典,包含超參數的名稱以及它們可以擁有的所有離散值

  • run_name (str) – 執行名稱,將包含在 logdir 中。 如果未指定,將使用目前的時間戳記。

  • global_step (int) – 要記錄的全域步驟值

範例

from torch.utils.tensorboard import SummaryWriter
with SummaryWriter() as w:
    for i in range(5):
        w.add_hparams({'lr': 0.1*i, 'bsize': i},
                      {'hparam/accuracy': 10*i, 'hparam/loss': 10*i})

預期結果

_images/add_hparam.png
flush()[source][source]

將事件檔案刷新到磁碟。

呼叫此方法以確保所有待處理的事件都已寫入磁碟。

close()[source][source]

文件

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Find development resources and get your questions answered

View Resources