Spec-Zone.ru › PyTorch 2

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, который будет записывать события и сводки в файл событий.

Parameters
  • 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]

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

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()

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

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

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

Parameters
  • 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]

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

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()

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

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

Параметры
  • метка (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.

Параметры
  • метка (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.

Параметры
  • метка (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 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)(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/2.1/tensorboard.html

Spec-Zone.ru

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