Spec-Zone.ru › PyTorch 2.14

torch.utils.tensorboard

Создано: 25 апр. 2019 г. | Последнее обновление: 20 июл. 2026 г.

Прежде чем продолжить, подробнее о TensorBoard можно узнать здесь: https://www.tensorflow.org/tensorboard/

После установки TensorBoard эти утилиты позволяют записывать модели и метрики PyTorch в каталог для визуализации в интерфейсе TensorBoard. Для моделей и тензоров PyTorch поддерживаются скалярные значения, изображения, гистограммы, графы и визуализация эмбеддингов.

Класс 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, который можно установить и запустить следующей командой:

pip install tensorboard
tensorboard --logdir=runs

Для одного эксперимента можно записывать множество данных. Чтобы не загромождать интерфейс и лучше группировать результаты, можно объединять графики, задавая им иерархические имена. Например, «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='') [исходный код]

Записывает записи непосредственно в файлы событий в 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) – Размер очереди ожидающих событий и сводных данных; при достижении этого размера один из вызовов ‘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) [исходный код]

Добавляет скалярные данные в сводку.

Параметры:
  • tag (str) – Идентификатор данных
  • scalar_value (float или string/blobname) – Сохраняемое значение
  • global_step (int) – Записываемое значение глобального шага
  • walltime (float) – Необязательная замена времени walltime по умолчанию (time.time()); время указывается в секундах от начала эпохи события
  • new_style (boolean) – Использовать новый формат (поле tensor) или старый формат (поле 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) [исходный код]

Добавляет гистограмму в сводку.

Параметры:
  • tag (str) – Идентификатор данных
  • values (torch.Tensor, numpy.ndarray или string/blobname) – Значения для построения гистограммы
  • global_step (int) – Записываемое значение глобального шага
  • bins (str) – Один из вариантов: {‘tensorflow’,’auto’, ‘fd’, …}. Определяет способ формирования интервалов. Другие варианты см. здесь: https://numpy.org/doc/stable/reference/generated/numpy.histogram.html
  • walltime (float) – Необязательная замена времени walltime по умолчанию (time.time()); время указывается в секундах от начала эпохи события

Примеры:

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, и мы выполним это преобразование за вас. Также подходит тензор формы (1,H,W)(1, H, W), (H,W)(H, W), (H,W,3)(H, W, 3), если указан соответствующий аргумент dataformats, например CHW, HWC, HW.

Примеры:

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 (Figure | list[Figure]) – Рисунок или список рисунков
  • global_step (int | None) – Записываемое значение глобального шага
  • close (bool) – Флаг автоматического закрытия рисунка
  • walltime (float | None) – Необязательная замена времени walltime по умолчанию (time.time()); время указывается в секундах от начала эпохи события
add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None) [исходный код]

Добавляет видеоданные в сводку.

Обратите внимание: для этого требуется пакет moviepy.

Параметры:
  • tag (str) – Идентификатор данных
  • vid_tensor (torch.Tensor) – Видеоданные
  • global_step (int) – Записываемое значение глобального шага
  • fps (float или int) – Кадров в секунду
  • walltime (float) – Необязательная замена времени walltime по умолчанию (time.time()); время указывается в секундах от начала эпохи события
Форма:

vid_tensor: (N,T,C,H,W)(N, T, C, H, W). Значения должны находиться в диапазоне [0, 255] для типа uint8 или [0, 1] для типа float.

add_audio(tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None) [исходный код]

Добавляет аудиоданные в сводку.

Параметры:
  • tag (str) – Идентификатор данных
  • snd_tensor (torch.Tensor) – Звуковые данные
  • global_step (int) – Записываемое значение глобального шага
  • sample_rate (int) – Частота дискретизации в Гц
  • walltime (float) – Необязательная замена времени walltime по умолчанию (time.time()); время указывается в секундах от начала эпохи события
Форма:

snd_tensor: (1,L)(1, L). Значения должны находиться в диапазоне [-1, 1].

add_text(tag, text_string, global_step=None, walltime=None) [исходный код]

Добавляет текстовые данные в сводку.

Параметры:
  • tag (str) – Идентификатор данных
  • text_string (str) – Сохраняемая строка
  • 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) [исходный код]

Добавляет данные графа в сводку.

Параметры:
  • model (torch.nn.Module) – Модель для отображения.
  • input_to_model (torch.Tensor или list из torch.Tensor) – Переменная или кортеж переменных, передаваемых на вход.
  • verbose (bool) – Следует ли выводить структуру графа в консоль.
  • use_strict_trace (bool) – Передавать ли именованный аргумент strict в torch.jit.trace. Передайте False, если нужно, чтобы трассировщик записывал изменяемые типы контейнеров (list, dict)
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None) [исходный код]

Добавляет данные для проектора эмбеддингов в сводку.

Параметры:
  • mat (torch.Tensor или numpy.ndarray) – Матрица, каждая строка которой является вектором признаков точки данных
  • metadata (list) – Список меток; каждый элемент будет преобразован в строку
  • label_img (torch.Tensor) – Изображения, соответствующие каждой точке данных
  • global_step (int) – Записываемое значение глобального шага
  • tag (str) – Имя эмбеддинга
  • metadata_header (list) – Список заголовков для метаданных с несколькими столбцами. Если задан, каждый элемент 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)

Примечание

Категориальные (то есть нечисловые) метаданные могут содержать не более 50 уникальных значений, если они используются для раскрашивания в проекторе эмбеддингов.

add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None) [исходный код]

Добавляет кривую точности и полноты.

Построение кривой точности и полноты позволяет оценить производительность модели при различных пороговых значениях. С помощью этой функции можно передать истинные метки (T/F) и уверенность модели в предсказаниях (обычно это выход модели) для каждой целевой переменной. Интерфейс TensorBoard позволит интерактивно выбирать пороговое значение.

Параметры:
  • tag (str) – Идентификатор данных
  • labels (torch.Tensor, numpy.ndarray или string/blobname) – Истинные данные. Бинарная метка для каждого элемента.
  • predictions (torch.Tensor, numpy.ndarray или string/blobname) – Вероятность того, что элемент будет классифицирован как истинный. Значение должно находиться в диапазоне [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) [source]

Создаёт специальную диаграмму, собирая теги диаграмм из раздела ‘scalars’.

ПРИМЕЧАНИЕ: эту функцию можно вызвать только один раз для каждого объекта SummaryWriter().

Поскольку функция передаёт в TensorBoard только метаданные, её можно вызвать до или после цикла обучения.

Параметры:

layout (dict) – {categoryName: charts}, где charts — также словарь {chartName: ListOfProperties}. Первый элемент в ListOfProperties — тип диаграммы (один из Multiline или Margin), а второй элемент должен быть списком, содержащим теги, использованные в функции 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]

Добавляет в TensorBoard сетки или облака 3D-точек.

Визуализация основана на 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). (batch, number_of_vertices, channels)

colors: (B,N,3)(B, N, 3). Значения должны находиться в диапазоне [0, 255] для типа uint8 или [0, 1] для типа float.

faces: (B,N,3)(B, N, 3). Значения для типа uint8 должны находиться в диапазоне [0, number_of_vertices].

Примеры:

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]

Добавляет набор гиперпараметров для сравнения в TensorBoard.

Параметры:
  • hparam_dict (dict) – Каждая пара «ключ — значение» в словаре представляет собой имя гиперпараметра и соответствующее ему значение. Тип значения может быть одним из bool, string, float, int или None.
  • 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]

Сбрасывает файл событий на диск.

Вызовите этот метод, чтобы убедиться, что все ожидающие события записаны на диск.

close() [source]

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/tensorboard.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API