Легко контролировать обучение нейронной сети
Регистрация кривых потерь и точности никогда не была легкой задачей. Мы часто сохраняем эти значения в массивах или списках, а затем наносим их на график в конце обучения. Поделиться этими графиками еще сложнее, когда отправка снимков экрана с этими графиками кажется единственным выходом. В этом руководстве мы рассмотрим эту проблему с помощью весов и смещений.
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 дальше, воспользуйтесь ссылками ниже.