Первоначально опубликовано на freecodecamp.org
Что, если бы вы могли отслеживать свои проекты машинного обучения Colab, Kaggle или AzureML на своем мобильном телефоне? Вы сможете проверять свои модели на лету — даже во время прогулки🚶.
Если вы являетесь разработчиком машинного обучения, вы знаете, как модели обучения могут легко занять много времени. Как здорово было бы следить за этим со своих мобильных телефонов?
Что ж, вы можете это сделать — и в ‹5 строк кода.
Почему удаленный мониторинг ваших моделей помогает
Прежде чем приступить к руководству и показать вам, как это работает, позвольте мне кратко описать, что вы можете сделать с TF Watcher, проектом с открытым исходным кодом, который мы будем использовать для мониторинга наших заданий машинного обучения:
- Легко интегрируется с вашим рабочим процессом ML, поэтому вам не нужно изменять какой-либо другой код в вашем рабочем процессе, чтобы заставить его работать.
- Все ваши визуализации и информационные панели работают в режиме реального времени.
- Вы, вероятно, захотите поделиться своей активной информационной панелью или ранее запущенной информационной панелью со своими коллегами, и это также позволит вам создавать общие ссылки.
- Это PWA, которое позволяет вам контролировать свои модели в автономном режиме с ограниченной емкостью.
- Вы также получаете точный контроль над тем, когда вы хотите регистрировать показатели.
Как отслеживать ваши проекты машинного обучения на вашем телефоне
Теперь давайте рассмотрим руководство по мониторингу ваших моделей на мобильном устройстве с помощью Google Colab. Я покажу вам, как использовать этот инструмент в Google Colab, чтобы каждый мог его опробовать, но вы можете практически воспроизвести его где угодно (даже на своем локальном компьютере).
Не стесняйтесь следовать вместе с этой коллаб-блокнотом.
Установите пакет Python tf-watcher
Чтобы отслеживать задания по машинному обучению на мобильных устройствах, необходимо установить пакет tf-watcher
Python. Это пакет Python с открытым исходным кодом, который я создал, и вы можете найти исходный код в этом репозитории GitHub.
Чтобы установить пакет Python из PyPI, выполните следующую команду в ячейке записной книжки:
!pip install tf-watcher
Как создать простую модель
Для целей этого примера мы увидим, как вы можете отслеживать задание по обучению, но вы также можете использовать этот пакет для мониторинга своих заданий по оценке или прогнозированию. Вскоре вы также увидите, как легко указать показатели, которые вы хотите отслеживать.
В этом примере мы будем использовать Fashion MNIST, простой набор данных из 60 000 изображений в градациях серого 10 категорий моды. Мы начнем с загрузки набора данных, а затем выполним простую предварительную обработку, чтобы еще больше ускорить наш пример.
Однако вы можете использовать все, о чем мы говорим в этой статье, в своих более сложных экспериментах.
Давайте получим набор данных:
import tensorflow as tf
# Load example MNIST data and pre-process it
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 784).astype("float32") / 255.0
x_test = x_test.reshape(-1, 784).astype("float32") / 255.0
# Limit the data to 1000 samples to make it faster
x_train = x_train[:1000]
y_train = y_train[:1000]
x_test = x_test[:1000]
y_test = y_test[:1000]
Это извлекает набор данных Fashion MNIST.
Теперь мы создадим простую нейронную сеть, которая имеет только один слой Dense
. Я покажу вам, как использовать это с последовательным API TensorFlow, но это работает точно так же при использовании функционального API или моделей подклассов.
# Define the Keras model
def get_model():
model = keras.Sequential()
model.add(keras.layers.Dense(1, input_dim=784))
model.compile(
optimizer=keras.optimizers.RMSprop(learning_rate=0.1),
loss="mean_squared_error",
metrics=["accuracy"],
)
return model
Вы могли заметить, что при компиляции нашей модели мы также указали metrics
, что позволяет указать, какие показатели нам нужно отслеживать.
Здесь я упоминаю «точность», чтобы иметь возможность отслеживать точность на своем мобильном устройстве. По умолчанию мы регистрируем «потери», поэтому в этом случае мы будем отслеживать 2 показателя: потери и точность.
Вы можете добавить столько показателей, сколько вам нужно. Вы также можете использовать встроенные метрики TensorFlow или добавить свою собственную метрику.
Как создать экземпляр класса обратного вызова
Теперь вы импортируете TF Watcher и создадите экземпляр одного из его классов:
import tfwatcher
MonitorCallback = tfwatcher.callbacks.EpochEnd(schedule = 1)
В этом примере:
- Мы используем класс
EpochEnd
из TF Watcher, чтобы указать, что мы заинтересованы в работе на уровне эпохи. Этих классов довольно много, которые вы можете использовать для своих нужд — все о других классах узнайте в документации. - Мы передаем
schedule
как 1 для мониторинга после каждой 1 эпохи. Вместо этого вы можете передать 3 (для мониторинга через каждые 3 эпохи) или вы также можете передать список конкретных номеров эпох, которые вы хотите отслеживать.
Когда вы запустите этот фрагмент кода, вы должны увидеть что-то вроде этого:
Это включает в себя уникальный 7-символьный идентификатор для вашего сеанса. Обязательно запишите этот идентификатор, так как вы будете использовать его для мониторинга вашей модели.
Как начать мониторинг вашей модели 🚀
Теперь мы будем обучать построенную нами модель и отслеживать метрики в реальном времени для обучения на мобильном устройстве.
model = get_model()
history = model.fit(
x_train,
y_train,
batch_size=128,
epochs=100,
validation_split=0.5,
callbacks = [MonitorCallback]
)
В этом фрагменте кода мы начинаем обучать нашу модель в течение 100 эпох (в этом случае должно быть довольно быстро). Мы также добавляем объект, который мы сделали на предыдущем шаге, как callback
.
Если в вашем случае вы отслеживаете прогноз вместо обучения, вы должны добавить callbacks = [MonitorCallback]
в метод прогнозирования.
Запустив приведенный выше фрагмент кода, вы можете начать отслеживать его из веб-приложения со своего мобильного устройства.
Перейдите на https://www.tfwatcher.tech/ и введите уникальный идентификатор, который вы создали выше. Это PWA, что означает, что вы также можете установить его на свои мобильные устройства и использовать как родное приложение для Android.
После того, как вы добавите свой идентификатор сеанса, вы сможете видеть, как ваши журналы прогрессируют в режиме реального времени на диаграммах. Помимо метрик, вы также должны иметь возможность видеть время, которое потребовалось для каждой эпохи. В других случаях это может занять время и для партии.
Как поделиться информационными панелями
Поскольку машинное обучение предполагает тесное сотрудничество, вы можете поделиться своими интерактивными информационными панелями с коллегами. Для этого просто нажмите кнопку «Поделиться ссылкой», и приложение создаст общедоступную ссылку, чтобы любой мог просмотреть ваш прогресс в реальном времени или сохраненные информационные панели.
Вот ссылка для общего доступа для панели инструментов, которую я создал в этом уроке.
Что еще вы можете сделать с TF Watcher?
Хотя пример, который я только что показал, выглядел довольно круто, с помощью этого инструмента мы можем сделать гораздо больше. Теперь я кратко расскажу о двух из этих сценариев: распределенное обучение и неусердное выполнение.
Распределенное обучение
Вы можете часто распределять обучение машинному обучению между несколькими графическими процессорами, несколькими машинами или TPU. Вероятно, вы делаете это с помощью tf.distribute.Strategy
TensorFlow API.
Вы можете использовать его точно так же с большинством стратегий распределения с ограниченным использованием при использовании ParameterServer
в пользовательском цикле обучения.
Вы можете найти отличные примеры использования этих стратегий с TensorFlow Keras здесь.
Неусердное исполнение
В TensorFlow 2 нетерпеливое выполнение включено по умолчанию. Но вы часто будете использовать tf.function
для построения графиков из ваших программ. Это инструмент преобразования, который создает независимые от Python графы потоков данных из вашего кода Python.
Одна из самых ранних версий этого проекта использовала некоторые вызовы Numpy, но теперь вы можете использовать этот код таким же образом и в неактивном режиме.
Спасибо за чтение!
Спасибо, что были со мной до конца. Теперь вы можете контролировать свои проекты машинного обучения из любого места на своем мобильном устройстве и вывести их на новый уровень. Я надеюсь, что вы так же взволнованы, чтобы начать использовать это, как и я.
Если вы узнали что-то новое или вам понравилось читать эту статью, поделитесь ею, чтобы другие могли ее увидеть. А пока, увидимся в следующем посте!
Вы также можете найти меня в Твиттере @rishit_dagli.