Во-первых, почему PyTorch?

Когда дело доходит до фреймворков глубокого обучения, тремя самыми популярными из них являются Keras, TensorFlow и PyTorch. Keras по-прежнему является наиболее широко используемой средой, главным образом потому, что это единственный высокоуровневый API из трех, поэтому его гораздо проще использовать. Тем не менее, PyTorch сильно растет.

Не говоря уже о том, что на ICLR 2020 65% кодов, которыми поделились исследователи, использовали для своей реализации PyTorch.

Давай приступим к работе

В этой статье я не буду освещать внутреннюю работу нейронных сетей, я в основном сосредоточусь на использовании TensorBoard.

Для этой цели мы будем использовать набор данных MNIST, который содержит 60000 рукописных цифр в градациях серого размером 28x28 пикселей.

Начнем с импорта:

import numpy as np
import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torch.utils.tensorboard import SummaryWriter
print(torch.__version__)

Далее мы импортируем набор данных с помощью библиотеки torchvision. Важно отметить, что использование всего набора данных для обучения — крайне плохая практика, вы должны разделить набор данных на наборы для обучения, тестирования и проверки. Имея это в виду, давайте импортируем набор данных. Набор данных будет загружен локально.

dataset = torchvision.datasets.MNIST(
 root=”./data/MNIST”,
 train = True,
 download = True,
 transform = transforms.Compose([transforms.ToTensor()]))

Построение модели

Так как мы имеем дело с изображениями, мы построим простую свёрточную нейронную сеть с двумя свёрточными слоями и двумя полносвязными слоями.

Мы будем использовать ReLU в качестве нашей функции активации.

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

Все идет нормально. У нас есть набор данных и наша модель, и теперь пришло время начать использовать TensorBoard.

TensorBoard

Во-первых, мы инициализируем SummaryWriter и добавим «комментарий» в качестве аргумента. Это поможет нам дифференцировать наши прогоны. В этой реализации каждый запуск будет содержать свои гиперпараметры в TensorBoard.

tensor_board = SummaryWriter(comment = f”Batch size={batch_size} Learning rate={learning_rate} Shuffle={shuffle}”)

Приступаем к обучению

Мы готовы начать обучение.

TensorBoard наиболее полезен во время и после тренировки. Это не только эстетически приятно смотреть во время тренировки, но и помогает выбрать правильные гиперпараметры, как мы скоро увидим.

Скаляры

Если мы хотим, чтобы точность возрастала, а потери выравнивались, мы можем добавить скалярные значения в TensorBoard.

tensor_board.add_scalar(‘Loss’, total_loss, epoch)
tensor_board.add_scalar(‘Accuracy’, total_correct / len(dataset), epoch)

Вы также можете добавить любые пользовательские значения, такие как количество правильных прогнозов и так далее.

Гистограммы

Мы также можем добавить гистограммы для визуализации веса и смещения, например, отдельных слоев, что иногда может быть невероятно полезным.

tensor_board.add_histogram(‘convolutional_1.bias’, network.convolutional_1.bias, epoch)
 
tensor_board.add_histogram(‘convolutional_1.weight’, network.convolutional_1.weight, epoch)

Настройка TensorBoard

  1. Загрузите TensorFlow и TensorBoard через приглашение pip или anaconda или что вам подходит.
  2. Откройте какой-нибудь cmd
  3. Измените каталог на каталог, в котором находится ваш файл кода, с помощью «cd»
  4. Тип: tensorboard — (двойной дефис) logdir=runs

Ваши прогоны будут автоматически помещены во вновь созданную папку runs, созданную TensorBoard.

Вы должны увидеть такое сообщение: TensorBoard 1.14.0 at http://DESKTOP-B4MSSS9:6006/ (нажмите CTRL+C, чтобы выйти)

5. Подключитесь к TensorBoard, введя localhost:6006 в браузере.

Готово!

Вы можете запустить свою модель с различными гиперпараметрами и посмотреть, какие из них работают лучше. Вам не нужно ничего делать, TensorBoard автоматически обновится, если будет получена новая информация.

Использование TensorBoard

Я обучил две модели с разными гиперпараметрами, поэтому хотел бы знать, какая из них имеет меньшие потери. Мне не нужно ничего делать, просто измените гиперпараметр в коде, и комментарий TensorBoard тоже изменится.

После 10 эпох похоже, что третья, новая модель показала себя лучше. Но что, если вы забыли, какой из них какой? Именно поэтому мы использовали комментарии. Все, что вам нужно сделать, это навести курсор на график, и вы увидите все необходимые детали.

Резюме

Несмотря на то, что TensorBoard — отличный инструмент, это не единственный способ оценить производительность вашей модели или настроить гиперпараметры. Вам также следует обратить внимание на важность функций или, например, на матрицу путаницы ваших выходных данных.

Полный код доступен по адресу: https://github.com/szelesaron/tensorboard_with_pytorch.