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

Но у каждого проекта есть свои особенности и механизмы. Не всегда возможно спроектировать среду, которая может отслеживать все различные модели вашего проекта, от простой линейной регрессии вашего случайного личного проекта до последней современной нейронной сети Transformer Neural Network от OpenAI. Если только не будет целая команда, вкладывающая в это работу, время и деньги.

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

Веса и отклонения

Weights & Biases - это платформа, которая помогает разработчикам работать с глубоким обучением. Добавив несколько строк кода в свой скрипт, вы можете начать отслеживать практически все, что касается ваших моделей: производительность, архитектуру и используемые параметры, системную информацию (например, количество используемых ЦП / ГП), время работы и многое другое. Код для написания разработан так, чтобы быть неинвазивным, поэтому он требует минимальных усилий для включения или отключения отслеживания.

Информация будет отправлена ​​на специальную страницу проекта на веб-сайте W&B, с которой вы сможете настроить классные визуализации, агрегировать информацию и сравнить обученные модели. В прошлый раз, когда я присоединился к группе для участия в конкурсе Kaggle, я не знал об этой платформе. Совместное использование моделей и результатов было невероятно трудным, и, потеряв слишком много времени на попытки понять, с какой версией кода был получен определенный результат, нам пришлось потратить еще больше времени на настройку среды для отслеживания этого.

Одним из преимуществ удаленного хранения данных является то, что легко сотрудничать в одном проекте и делиться результатами. Платформа запустила сервис под названием Benchmarks, позволяющий людям делиться своей реализацией для конкретной задачи. Таким образом, когда кто-то хочет начать работу над этой задачей, он / она уже имеет доступ к списку подходов (включая самые современные) с их реализацией и оценками.

Отслеживание пробежек с W&B

Было бы еще много чего поговорить, но пора показать простой пример того, как это работает!

Классификатор нейронной сети

Задача, которую мы займемся, - это классификация рукописных цифр из набора данных MNIST. Это один из наиболее часто используемых наборов данных, для которого вы найдете массу учебных пособий в Интернете, если у вас нет такого большого опыта работы с нейронными сетями. Мы будем использовать библиотеку Keras для реализации нашей простой нейронной сети, но даже если вы никогда ее не использовали, не волнуйтесь, мы можем рассматривать реализацию как черный ящик на данный момент и по-прежнему ценить все возможности Weights & Biases!

Как я уже сказал, я не буду вдаваться в подробности реализации кода, потому что это не входит в объем данного сообщения в блоге. Это не лучший код для решения задачи, но я хотел, чтобы он был максимально простым. Нейронная сеть состоит из первого слоя размером 28 * 28 = 784 (который представляет собой размер входного изображения 28x28, уменьшенного до одного вектора), затем одного скрытого слоя размером 516 и выходного слоя размером 10 (размер количество цифр, т. е. классы для прогнозирования).

import tensorflow.keras as keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import RMSprop
num_classes = 10
epochs = 20
# split the data between train and test sets
(x_train, y_train), (x_valid, y_valid) = keras.mnist.load_data()
# transform 28 by 28 pixels image to a vector of length 28*28 
x_train = x_train.reshape(-1, 784)
x_test = x_test.reshape(-1, 784)
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# define a simple neural network with 1 hidden layer of size 516
model = Sequential()
model.add(Dense(516, activation='relu', input_shape=(28*28,)))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])
model.fit(x_train, y_train,
          epochs=epochs,
          verbose=1,
          validation_data=(x_valid, y_valid))

Добавить код отслеживания

Пришло время добавить в наш код трекер Weights & Biases!

Шаги следующие:

  1. Зарегистрируйтесь на платформе. Услуга бесплатна, если вы не хотите использовать большие модели корпоративного уровня или создавать совместные, но частные проекты. Для студентов, ученых и проектов с открытым исходным кодом последнее ограничение отсутствует. После регистрации вы получите ключ API, необходимый для привязки кода к вашей учетной записи.
  2. Создайте новый проект. Проект может быть общедоступным, что означает, что любой имеет доступ для чтения, но не может загружать запуск; открытый, в котором любой желающий также имеет возможность добавлять свои прогоны и отчеты; приватная, в которую имеет доступ только владелец.
  3. Установите библиотеку Python wandb для автоматического отслеживания процесса обучения, а затем подключитесь к своей учетной записи с помощью ключа API. Этот процесс упрощает менеджер пакетов Python под названием pip.
pip install --upgrade wandb 
wandb login YOUR_API_KEY

4. Вставьте код в наш скрипт, чтобы начать отслеживание.

Новые строки нашего кода выделены в следующем скрипте.

import tensorflow.keras as keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import RMSprop
import wandb
from wandb.keras import WandbCallback
wandb.init(project="introduction_wandb")
num_classes = 10
...
model.fit(x_train, y_train,
          epochs=epochs,
          verbose=1,
          validation_data=(x_valid, y_valid),
          callbacks=[WandbCallback()])

Визуализация

Запустив код, модель будет тренироваться в течение 20 эпох, достигнув точности проверки 97,45%, но это не единственная информация, которую хранит W&B. Поехали смотреть на страницу проекта.

Выполненный запуск теперь отображается слева со случайным именем (можно изменить имя на странице или установить его из кода Python).

Если мы нажмем на оптимистичный йогурт-1, мы получим доступ к большому количеству информации, которую W&B автоматически записал.

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

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

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

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

В разделе Модель представлена ​​краткая информация об архитектуре нейронной сети.

Очень полезный раздел - Журналы, в котором отображается весь вывод оболочки в процессе обучения. Невероятно полезно проверять предупреждения и ошибки, даже если у нас больше нет доступа к терминалу.

И, наконец, раздел Файлы, из которого вы можете скачать предварительно обученную модель и множество других данных.

Во введении к Weights & Biases я показал вам только основные функции платформы. Невероятно, сколько уловок я обнаружил при его использовании, и они будут показаны в будущих публикациях, таких как интеграция с Github, совместные проекты, автоматическая настройка гиперпараметров, отчеты, визуализация градиентов, оповещения через Slack и многое другое.

Страница проекта на платформе Weights & Biases является общедоступной, поэтому вы можете получить к ней доступ и изучить ее по адресу https://app.wandb.ai/mrc-varrone/introduction_wandb, даже если у вас нет учетной записи.

Надеюсь, вам понравилось это руководство!

Это первая из серии сообщений в блоге, опубликованных сообществом специалистов по данным PoliMi. Мы - сообщество студентов Миланского политехнического университета, которое организует мероприятия и пишет ресурсы по темам Data Science и Machine Learning.

Если у вас есть предложения или вы хотите с нами связаться, вы можете написать нам на нашей странице в Facebook.