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, который будет записывать события и сводки в файл событий.- Параметры:
-
- 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] -
Добавление скалярных данных в сводку.
- Параметры:
-
- 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] -
Добавление нескольких скалярных данных в сводку.
- Параметры:
Примеры:
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] -
Добавление гистограммы в сводку.
- Параметры:
-
- 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.- Параметры:
-
- tag (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.- Параметры:
-
- tag (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.- Параметры:
-
- tag (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 или список 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 или 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/1.13/tensorboard.html