torch.utils.tensorboard
Перед продолжением, более подробную информацию о TensorBoard можно найти по адресу https://www.tensorflow.org/tensorboard/
После установки TensorBoard эти утилиты позволяют записывать модели и метрики PyTorch в директорию для визуализации в интерфейсе TensorBoard. Поддерживаются визуализации скаляров, изображений, гистограмм, графиков и вложений для моделей и тензоров PyTorch, а также сетей и блоков Caffe2.
Класс 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='')[source] -
Записывает записи непосредственно в файлы событий в log_dir для использования TensorBoard.
Класс
SummaryWriterпредоставляет API высокого уровня для создания файла событий в заданной директории и добавления в него сводок и событий. Класс обновляет содержимое файла асинхронно. Это позволяет программе обучения вызывать методы для добавления данных в файл непосредственно из цикла обучения без замедления обучения.-
__init__(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix='')[source] -
Создает
SummaryWriter, который будет записывать события и сводки в файл событий.- Parameters
-
- 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)[source] -
Добавляет скалярные данные в сводку.
- Parameters
-
- tag (str) – Идентификатор данных
- scalar_value (float или строка/имя_блоба) – Сохраняемое значение
- 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()Ожидаемый результат:
-
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)[source] -
Добавляет много скалярных данных в сводку.
- Parameters
Примеры:
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)[source] -
Добавляет гистограмму в сводку.
- Parameters
-
- tag (str) – Идентификатор данных
- values (torch.Tensor, numpy.ndarray или строка/имя_блоба) – Значения для построения гистограммы
- global_step (int) – Значение глобального шага для записи
- bins (str) – Один из {‘tensorflow’,’auto’, ‘fd’, …}. Это определяет, как создаются бины. Вы можете найти другие варианты в: https://docs.scipy.org/doc/numpy/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')[source] -
Добавить данные изображения в сводку.
Обратите внимание, что для этого требуется пакет
pillow.- Параметры
-
- метка (str) – Идентификатор данных
- img_tensor (torch.Tensor, numpy.ndarray, или имя строки/блоба) – Данные изображения
- 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')[source] -
Добавить пакетные данные изображения в сводку.
Обратите внимание, что для этого требуется пакет
pillow.- Параметры
-
- метка (str) – Идентификатор данных
- img_tensor (torch.Tensor, numpy.ndarray, или имя строки/блоба) – Данные изображения
- 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)[source] -
Отобразить график matplotlib в качестве изображения и добавить его в сводку.
Обратите внимание, что для этого требуется пакет
matplotlib.- Параметры
-
- метка (str) – Идентификатор данных
- figure (matplotlib.pyplot.figure) – График или список графиков
- global_step (int) – Значение глобального шага для записи
- close (bool) – Флаг для автоматического закрытия графика
- walltime (float) – Необязательное переопределение значения walltime по умолчанию (time.time()) в секундах после эпохи события
-
add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None)[source] -
Добавить данные видео в сводку.
Обратите внимание, что для этого требуется пакет
moviepy.- Параметры
- Форма:
-
vid_tensor: . Значения должны находиться в диапазоне [0, 255] для типа
uint8или [0, 1] для типаfloat.
-
-
add_audio(tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None)[source] -
Добавление аудиоданных в сводку.
- Параметры
-
- 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)[source] -
Добавление текстовых данных в сводку.
- Параметры
Примеры:
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] -
Добавление данных графика в сводку.
- Параметры
-
- model (torch.nn.Module) – Модель для отрисовки.
- input_to_model (torch.Tensor or list of torch.Tensor) – Переменная или кортеж переменных для ввода.
- verbose (bool) – Выводить ли структуру графика в консоль.
-
use_strict_trace (bool) – Нужно ли передавать ключевое слово
strictвtorch.jit.trace. Передавайте False, когда вы хотите, чтобы трекер записывал ваши изменяемые контейнеры типов (список, словарь)
-
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)[source] -
Добавление данных проектора вложения в сводку.
- Параметры
-
- mat (torch.Tensor or numpy.ndarray) – Матрица, где каждая строка — вектор признаков точки данных
- metadata (list) – Список меток, каждый элемент будет преобразован в строку
- label_img (torch.Tensor) – Изображения, соответствующие каждой точке данных
- global_step (int) – Значение глобального шага для записи
- tag (str) – Имя для вложения
- Форма:
-
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)
-
add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None)[source] -
Добавляет кривую точности-полноты. Построение кривой точности-полноты позволяет понять производительность модели при различных значениях порога. С помощью этой функции вы предоставляете фактические метки (Истина/Ложь) и доверительность прогноза (обычно результат вашей модели) для каждого целевого значения. В пользовательском интерфейсе TensorBoard вы сможете выбрать порог интерактивно.
- Параметры
-
- tag (str) – Идентификатор данных
- labels (torch.Tensor, numpy.ndarray или строка/имя_файла_данных) – Фактические данные. Двоичная метка для каждого элемента.
- predictions (torch.Tensor, numpy.ndarray или строка/имя_файла_данных) – Вероятность того, что элемент будет классифицирован как истинный. Значение должно быть в диапазоне [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) – {имяКатегории: диаграммы}, где диаграммы — также словарь {имяДиаграммы: СписокСвойств}. Первый элемент в СписокСвойств — тип диаграммы (один из 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] -
Добавить сетки или 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: . (пакет, количество_вершин, каналы)
colors: . Значения должны лежать в интервале [0, 255] для типа
uint8или [0, 1] для типаfloat.faces: . Значения должны лежать в интервале [0, количество_вершин] для типа
uint8.
Примеры:
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)[source] -
Добавить набор гиперпараметров для сравнения в TensorBoard.
- Параметры
-
-
hparam_dict (dict) – Каждая пара ключ-значение в словаре — это имя гиперпараметра и его соответствующее значение. Тип значения может быть одним из
bool,string,float,int, илиNone. -
metric_dict (dict) – Каждая пара ключ-значение в словаре — это имя метрики и ее соответствующее значение. Обратите внимание, что используемый здесь ключ должен быть уникальным в записи tensorboard. В противном случае значение, добавленное вами с помощью
add_scalar, будет отображаться в плагине hparam. В большинстве случаев это нежелательно. - hparam_domain_discrete – (Необязательно[Dict[str, List[Any]]]) Словарь, содержащий имена гиперпараметров и все дискретные значения, которые они могут принимать
- run_name (str) – Имя запуска, которое будет включено в logdir. Если не указано, будет использоваться текущая метка времени.
-
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]
-
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/tensorboard.html