Tenorboard Google tensorflow - это веб-сервер для визуализации процесса обучения нейронной сети, он визуализирует скалярные значения, изображения, текст и т. Д .; эта информация сохраняется как events в тензорном потоке. Жалко, что в других фреймворках глубокого обучения такого инструмента нет, поэтому уже есть пакеты, позволяющие пользователям регистрировать события без тензорного потока; однако они предоставляют только базовые функции. Цель этого пакета - позволить исследователям использовать простой интерфейс для регистрации событий в PyTorch (а затем отображать визуализацию в тензорной таблице). Этот пакет в настоящее время поддерживает регистрацию скаляра, изображения, звука, гистограммы, текста, встраивания и маршрута обратного распространения. Следующее руководство протестировано на Ubuntu и Mac, а среда - это python2 и python3 anaconda.

Установите тензорную плату для PyTorch

Просто введите pip install tensorboard-pytorch в bash, чтобы установить этот пакет. Чтобы использовать новейшую версию, вам может потребоваться сборка из исходного кода или pip install tensorboard-pytorch —-no-cache-dir.

Установить тензорборд-сервер

Чтобы запустить веб-сервер tensorboard, вам необходимо установить tenorflow от pip install tensorflow или pip install tensorflow-gpu. После этого введите tensorboard --logdir=[yourlogdir], чтобы запустить сервер, где yourloaddir - параметр конструктора объекта. Я считаю эту команду утомительной, поэтому добавляю строку alias tb='tensorboard --logdir 'in ~/.bash_profile. Таким образом, указанная выше команда упрощается до tb [yourlogdir]. Используйте свой любимый браузер для загрузки страницы тензорной доски, адрес будет показан в терминале после запуска сервера.

общее использование:

Http://tensorboard-pytorch.readthedocs.io/en/latest/tensorboard.html

Создайте экземпляр записи событий

Прежде чем что-либо регистрировать, нам нужно создать экземпляр писателя. Это можно сделать с помощью:

from tensorboard import SummaryWriter 
#SummaryWriter encapsulates everything
writer = SummaryWriter('runs/exp-1')
#creates writer object. The log will be saved in 'runs/exp-1'
writer2 = SummaryWriter()
#creates writer2 object with auto generated file name, the dir will be something like 'runs/Aug20-17-20-33'
writer3 = SummaryWriter(comment='3x learning rate')
#creates writer2 object with auto generated file name, the comment will be appended to the filename. The dir will be something like 'runs/Aug20-17-20-33-3xlearning rate'

Каждая подпапка будет рассматриваться как разные эксперименты в тензорной таблице. Каждый раз, когда вы повторно запускаете эксперимент с другими настройками, вы должны изменять имя подпапки, например runs/exp2, runs/myexp, чтобы вы могли легко сравнивать различные настройки эксперимента. Введите tb runs, чтобы сравнить разные прогоны в тензорной таблице.

Сохранить скалярное значение

Скалярное значение - это самый простой тип данных, с которым приходится иметь дело. В основном мы сохраняем значение потерь на каждом шаге обучения или точность после каждой эпохи. Иногда я сохраняю и соответствующую скорость обучения. Сохранить скалярное значение дешево. Просто записывайте все, что считаете важным. Чтобы записать скалярное значение, используйте writer.add_scalar('myscalar', value, iteration). Обратите внимание, что программа жалуется, если вы скармливаете переменную PyTorch. Не забудьте извлечь скалярное значение с помощью x.data[0], если x - переменная torch.

Сохранить изображение

Изображение представляется в виде трехмерного тензора. Самый простой случай - сохранять по одному изображению за раз. В этом случае изображение должно быть передано как трехмерный тензор размера [3, H, W]. Три измерения соответствуют каналам R, G, B изображения. После того, как ваше изображение вычислено, используйте writer.add_image('imresult', x, iteration), чтобы сохранить изображение. Если у вас есть пакет изображений для показа, используйте функцию torchvision make_grid, чтобы подготовить массив изображений и отправить результат в add_image(...). пс. make_grid принимает 4D-тензор и возвращает мозаичные изображения в 3D-тензоре.

Сохранить гистограмму

Сохранение гистограммы стоит дорого. Как по времени вычислений, так и по хранению. Если после использования этого пакета тренировки замедляются, сначала проверьте это. Чтобы сохранить гистограмму, преобразуйте массив в массив numpy и сохраните с помощью writer.add_histogram('hist', array, iteration).

Сохранить аудио с writer.add_audio('myaudio', audio, iteration)

В настоящее время частота дискретизации этой функции зафиксирована на уровне 44100 кГц, одноканальный. Входные данные функции add_audio - это одномерный массив, каждый элемент которого представляет последовательные выборки амплитуды. Для 2-секундного звука вход x должен содержать 88200 элементов. Каждый элемент должен находиться в [-1, 1].

Сохранить текст с помощью writer.add_text('mytext','this is a pen', iteration)

Это банально :)

Сохранить график сетевой модели (ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ)

Отрисовка графика основана на обратной трассировке автограда. Он рекурсивно переходит к атрибуту next_functions в переменной, отрисовывая все обнаруженные узлы. Чтобы нарисовать график, вам нужна модель m и входная переменная t, которые имеют правильный размер для m. Пусть r = m(t), затем вызовите writer.add_graph(m, r), чтобы сохранить график. По умолчанию входной тензор не требует градиента, поэтому он будет опущен при обратной трассировке. Чтобы нарисовать входной узел, передайте дополнительный параметр requires_grad=True при создании входного тензора. См. Полный пример https://github.com/lanpa/tensorboard-pytorch/blob/master/demo_graph.py.

Сохранить визуализацию внедрения

Встраивание - это метод визуализации данных большого размера. Для преобразования многомерных данных в воспринимаемые человеком трехмерные данные, tensorboard предоставляет PCA и t-sne для проецирования данных в низкоразмерное пространство. Что вам нужно сделать, так это набрать кучу баллов, а все остальное Tenorboard сделает за вас. Набор точек передается как тензор размера n x d, где n - количество точек, а d - размер объекта. Представление объекта может быть либо необработанными данными (например, изображение mnist), либо представлением, полученным вашей сетью (извлеченный объект). Это определяет, как распределяются баллы. Чтобы сделать визуализацию более информативной, вы можете передать необязательные metadata или label_imgs для каждой точки данных. Таким образом, вы можете видеть, что у соседней точки есть похожая метка, а у удаленных точек очень разные метки (семантически или визуально). Здесь метаданные - это список меток, и длина списка должна быть равна n, количеству точек. label_imgs - это 4D тензор размера NCHW. N также должно быть равно n. См. Полный пример https://github.com/lanpa/tensorboard-pytorch/blob/master/demo_embedding.py.

другие советы (тензорной доски):

Ведение журнала стоит дешево, но дисплей стоит дорого.

По моему опыту, если есть 3 или более экспериментов, которые нужно показать одновременно, и каждый эксперимент имеет, скажем, 50 000 точек, тензорной доске может потребоваться много времени для представления данных.

Группировка участков

Обычно в одном эксперименте нужно зарегистрировать много чисел. Например, при обучении GAN вы должны регистрировать потерю генератора, дискриминатора. Если потеря состоит из двух других функций потерь, скажем, L1 и MSE, вы можете также зарегистрировать значение двух других потерь. В этом случае вы можете записать теги как Gen/L1, Gen/MSE, Desc/L1, Desc/MSE. Таким образом, tenorboard сгруппирует графики в два раздела (Gen, Desc). Вы также можете использовать регулярное выражение для фильтрации данных.

Измените отметку ползунка

По умолчанию количество отметок для ползунка равно 10. Чтобы сделать его более плотным, просто измените жестко запрограммированный event_accumulator in~/anaconda3/lib/python3.6/site-packages/tensorflow/tensorboard/backend/application.py по своему усмотрению.