Spec-Zone.ru › PyTorch 1

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)

Ожидаемый результат:

_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='') [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) – При сбоях регистрации на шаге 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) [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()

Ожидаемый результат:

_images/add_scalar.png
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None) [source]

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

Параметры:
  • 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) [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()

Ожидаемый результат:

_images/add_histogram.png
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: По умолчанию (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') [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: По умолчанию (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) [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.

Параметры:
  • 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) [source]

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

Параметры:
  • 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) [source]

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

Параметры:
  • 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) [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)(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)
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: (B,N,3)(B, N, 3). (батчи, количество_вершин, каналы)

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

faces: (B,N,3)(B, N, 3). Значения должны лежать в пределах [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. Если не указано, будет использоваться текущая метка времени.

Примеры:

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]

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

Spec-Zone.ru

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