Легко контролировать обучение нейронной сети

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

Weights & Biases (WandB) - это пакет Python, который позволяет нам отслеживать наши тренировки в режиме реального времени. Его можно легко интегрировать с популярными фреймворками глубокого обучения, такими как Pytorch, Tensorflow или Keras. Кроме того, это позволяет нам организовывать прогоны в проекты, где мы можем легко сравнивать их и определять наиболее эффективную модель. В этом руководстве мы узнаем, как использовать WandB для ведения журнала.

Давайте начнем

Во-первых, давайте создадим бесплатную учетную запись WandB здесь. WandB предоставляет ограниченное хранилище 200 ГБ в бесплатной учетной записи, где мы можем регистрировать графики, изображения, видео и многое другое.

Установить WandB

Запуск приведенного ниже фрагмента кода установит WandB в наш экземпляр Colab Notebook. После установки и импорта WandB он предложит нам пройти аутентификацию так же, как мы это делаем при подключении Google Диска к экземпляру ноутбука.

Набор данных

В этом руководстве мы обучим сверточную нейронную сеть на наборе данных Fashion MNIST, который доступен в torchvision.datasets PyTorch. Мы разделим наборы данных на партии и перемешаем их перед отправкой в ​​нашу нейронную сеть. Для простоты мы не будем использовать какие-либо дополнения данных, кроме преобразования изображений и меток в тензоры факелов.

Нейронная сеть

Мы будем использовать простую сверточную нейронную сеть с 2-мя слоями Conv и 3-мя линейными слоями. На входном уровне Conv мы сохраним счетчик входных каналов равным 1, чтобы нейронная сеть могла принимать полутоновые изображения. Точно так же в последнем скрытом слое количество выходных каналов должно быть 10, чтобы модель могла выводить оценки для каждого из 10 классов.

Обучение нейронной сети

Инициализация WandB

Перед тренировкой надо запустить wandb.init(). Это инициализирует новый запуск в базе данных WandB. wandb.init() имеет следующие параметры:

  • Название пробега (строка)
  • Название проекта, в котором должен быть создан этот прогон (строка)
  • Примечания об этом прогоне (строка) [необязательно]
  • Теги для связи с этим прогоном (список строк) [необязательно]
  • Entity - это имя пользователя нашей учетной записи WandB (строка).

Регистрация гиперпараметров (необязательно)

Любой гиперпараметр, который мы хотим зарегистрировать, можно определить как атрибут wandb.config. Обратите внимание, что wandb.config следует использовать для регистрации только тех значений, которые не меняются во время обучения. Здесь мы зарегистрировали скорость обучения с использованием этого метода.

Регистрация гистограмм веса сети (необязательно)

Регистрация гистограмм веса так же проста, как вызов wandb.watch() и передача объекта network в качестве аргумента.

Потери и точность регистрации

В конце каждой эпохи мы можем регистрировать значения потерь и точности, используя wandb.log(). Этот метод принимает в качестве аргумента словарь, отображающий имена (строку) с соответствующими значениями. Обратите внимание, что этот метод вызывается в конце каждой эпохи.

wandb.log({"Epoch": epoch,        
           "Train Loss": loss_train,        
           "Train Acc": acc_train,        
           "Valid Loss": loss_valid,        
           "Valid Acc": acc_valid})

Полный обучающий код приведен ниже. Обратите внимание, что train и validate - это две вспомогательные функции, которые определены в Блокноте Colab.

Следите за обучением

Теперь, когда наша модель обучается, мы можем просматривать графики обучения в режиме реального времени. Перед началом обучения в выходных данных ячейки будут напечатаны Ссылка на выполнение и Ссылка на проект. Щелкните ссылку «Выполнить», чтобы перейти на страницу «Выполнить». Здесь вы можете увидеть графики в реальном времени (графики будут обновляться по мере обучения модели). Обратите внимание, что графики интерактивны, мы можем объединить несколько графиков, сгладить их, изменить цвет или условные обозначения и многое другое.

Напомним, что мы также записываем гистограммы веса сети. Их можно просмотреть в разделе гистограммы.

Сравнить несколько прогонов

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

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

Поделитесь своими пробежками

Поделиться графиками обучения вашей модели с WandB так же просто, как поделиться ссылкой на выполнение или ссылку на проект, просто убедитесь, что проект является общедоступным для просмотра другими. Люди, у которых есть ссылка на проект или ссылку «Выполнить», также могут просматривать графики в реальном времени. Разве это не круто!

Вот и все, ребята!

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

Хочу больше!

Чтобы изучить WandB дальше, воспользуйтесь ссылками ниже.