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

torch.utils.tensorboard

在繼續之前,您可以在 https://www.tensorflow.org/tensorboard/ 找到更多關於 TensorBoard 的詳細資訊

安裝 TensorBoard 後,您可以使用這些工具將 PyTorch 模型和指標記錄到目錄中,以便在 TensorBoard UI 中進行視覺化。PyTorch 模型和張量以及 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 雜亂無章並獲得更好的結果分群,我們可以透過階層式命名來對圖表進行分組。例如,「損失/訓練」和「損失/測試」將被分組在一起,而「準確度/訓練」和「準確度/測試」將在 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


類別 torch.utils.tensorboard.writer.SummaryWriter(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix='')[來源]

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

SummaryWriter 類別提供了一個高階 API,用於在給定目錄中建立事件檔案,並向其中新增摘要和事件。該類別會非同步更新檔案內容。這允許訓練程式直接從訓練迴圈中呼叫方法以將資料新增到檔案中,而不會降低訓練速度。

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

建立一個 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) – 在其中一個「新增」呼叫強制將資料寫入磁碟之前,待處理事件和摘要的佇列大小。預設值為 10 個項目。

  • 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)[原始碼]

將純量資料新增至摘要。

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

  • scalar_value (floatstring/blobname) – 要儲存的值

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

  • walltime (float) – 選擇性覆寫預設 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()),以事件時期後的秒數表示

範例

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()),以事件時期後的秒數表示

  • dataformats (str) – 影像資料格式規格,格式為 CHW、HWC、HW、WH 等。

形狀

img_tensor: 預設值為 (3,H,W)(3, H, W)。您可以使用 torchvision.utils.make_grid() 將一批張量轉換為 3xHxW 格式,或呼叫 add_images 讓我們來處理。只要傳遞了對應的 dataformats 引數(例如 CHWHWCHW),(1,H,W)(1, H, W)(H,W)(H, W)(H,W,3)(H, W, 3) 的張量也適用。

範例

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')[原始碼]

將批次的影像資料新增至摘要。

請注意,這需要 pillow 套件。

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

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

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

  • walltime (float) – 選擇性覆寫預設 walltime (time.time()),以事件時期後的秒數表示

  • 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)[原始碼]

將 matplotlib 圖表渲染成影像並將其新增至摘要。

請注意,這需要 matplotlib 套件。

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

  • figure (Union[Figure, List[Figure]]) – 圖表或圖表清單

  • global_stepOptional[int]) – 要記錄的全局步驟值

  • closebool) – 是否自動關閉圖表的旗標

  • walltimeOptional[float]) – 可選擇覆寫預設 walltime(time.time()),即事件發生後的秒數(從紀元開始計算)

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

將影片數據添加到摘要。

請注意,這需要使用 moviepy 套件。

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

  • vid_tensortorch.Tensor) – 影片數據

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

  • fpsfloatint) – 每秒影格數

  • walltime (float) – 選擇性覆寫預設 walltime (time.time()),以事件時期後的秒數表示

形狀

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]

將音訊數據添加到摘要。

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

  • snd_tensortorch.Tensor) – 音訊數據

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

  • sample_rateint) – 採樣率(Hz)

  • walltime (float) – 選擇性覆寫預設 walltime (time.time()),以事件時期後的秒數表示

形狀

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

add_text(tag, text_string, global_step=None, walltime=None)[source]

將文字數據添加到摘要。

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

  • text_stringstr) – 要儲存的字串

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

  • walltime (float) – 選擇性覆寫預設 walltime (time.time()),以事件時期後的秒數表示

範例

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)[source]

將圖表數據添加到摘要。

參數
  • modeltorch.nn.Module) – 要繪製的模型。

  • input_to_modeltorch.Tensorlisttorch.Tensor) – 要輸入的變數或變數元組。

  • verbosebool) – 是否在控制台中印出圖表結構。

  • use_strict_tracebool) – 是否將關鍵字參數 strict 傳遞給 torch.jit.trace。如果您希望追蹤器記錄您的可變容器類型(list、dict),請傳遞 False

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

將嵌入式投影機數據添加到摘要。

參數
  • mattorch.Tensornumpy.ndarray) – 每行都是數據點特徵向量的矩陣

  • metadatalist) – 標籤列表,每個元素都將轉換為字串

  • label_imgtorch.Tensor) – 對應於每個數據點的影像

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

  • tagstr) – 嵌入的名稱

  • metadata_headerlist) – 多欄中繼資料的標題列表。如果給定,則每個中繼資料都必須是與標題相對應的值列表。

形狀

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)

注意

如果要在嵌入式投影機中使用類別(即非數值)中繼資料進行著色,則唯一值不能超過 50 個。

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

新增精準率-召回率曲線。

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

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

  • labelstorch.Tensornumpy.ndarraystring/blobname) – 真實數據。每個元素的二元標籤。

  • predictions (torch.Tensornumpy.ndarraystring/blobname) – 元素被分類為 True 的概率。值應介於 [0, 1] 之間

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

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

  • walltime (float) – 選擇性覆寫預設 walltime (time.time()),以事件時期後的秒數表示

範例

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)[原始碼]

透過收集「scalars」中的圖表標籤來建立特殊圖表。

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

因為它只提供中繼資料給 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)[原始碼]

將網格或 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()),以事件時期後的秒數表示

形狀

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)[原始碼]

添加一組要在 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()[原始碼]

將事件檔案刷新到磁碟。

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

close()[原始碼]

文件

取得 PyTorch 的完整開發人員文件

查看文件

教學課程

取得適用於初學者和進階開發人員的深入教學課程

查看教學課程

資源

尋找開發資源並取得問題解答

查看資源