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)
Ожидаемый результат:
-
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) – Если запись прерывается на шаге и возобновляется на шаге , все события, у которых global_step больше или равен , будут удалены и скрыты в 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()Ожидаемый результат:
-
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.Ожидаемый результат:
-
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()Ожидаемый результат:
-
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: По умолчанию — . Можно использовать
torchvision.utils.make_grid()для преобразования пакета тензоров в формат 3xHxW или вызватьadd_images, и мы выполним это преобразование за вас. Также подходит тензор формы , , , если указан соответствующий аргумент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()Ожидаемый результат:
-
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: По умолчанию — . Если указан
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()Ожидаемый результат:
-
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: . Значения должны находиться в диапазоне [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, 1].
-
add_text(tag, text_string, global_step=None, walltime=None)[исходный код] -
Добавляет текстовые данные в сводку.
- Параметры:
Примеры:
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 — размерность признаков
label_img:
Примеры:
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: . (batch, number_of_vertices, channels)
colors: . Значения должны находиться в диапазоне [0, 255] для типа
uint8или [0, 1] для типаfloat.faces: . Значения для типа
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) – Значение глобального шага для записи
-
hparam_dict (dict) – Каждая пара «ключ — значение» в словаре представляет собой имя гиперпараметра и соответствующее ему значение. Тип значения может быть одним из
Примеры:
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})Ожидаемый результат:
-
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