Воплотите вашу идею с бумаги в производство

Введение

TensorFlow (TF) был представлен сообществу в 2015 году. С тех пор он стал одной из самых популярных библиотек глубокого обучения. Программисты, специалисты по обработке данных и исследователи могут использовать его для создания моделей «из коробки» либо с помощью API-интерфейсов, либо путем написания вещей с нуля.

Некоторые концепции, лежащие в основе этого, такие как построение операций с графами, сеансов и т. Д., Иногда могут быть сложными. По этой причине в последние годы Google пытается обновить его, чтобы сделать TensorFlow более удобным для пользователя. В 2019 году ожидание закончилось, и был выпущен TensorFlow 2.0, а вместе с ним и важные новости! В этом посте я попытаюсь возобновить некоторые из самых значительных изменений, а также объяснить новые передовые практики при его использовании!

tl;dr

TensorFlow 2 стал более удобным для разработчиков и простым в использовании. Keras теперь является рекомендуемым высокоуровневым API, и все оптимизаторы, показатели, потери и уровни были объединены под tf.keras. Он предлагает более чистый способ работы. Отладка стала проще из-за активного выполнения тензоров. Введение в декоратор tf.function позволяет оптимизировать обычные функции Python для повышения производительности с помощью TensorFlow. Конечные точки API также были очищены для обеспечения согласованности в TensorFlow.

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

Наконец, по умолчанию

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

Теперь по умолчанию мы используем "Стремительное выполнение", шаблон выполнения, построение графиков и сеансы стали более интуитивными и "питоническими".

Больше Numpy-ish

NumPy - популярная библиотека Python, ориентированная на математические операции с матрицами. TensorFlow 2 больше похож на NumPy из-за активного исполнения. Также метод «NumPy» для тензоров позволяет преобразовывать тензоры в массивы NumPy.

Декоратор (тф. Функция)

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

Чистый API

TensorFlow 1.X страдал от огромного количества дублированного кода, особенно в модуле contrib, который хранится сообществом. Часто можно было увидеть одну и ту же точную функцию активации, например, реализованную в нескольких разных местах.

Теперь API TensorFlow очищен, и многие из этих API удалены, а другие заменены на их эквивалентную версию в TF 2.X (tf.summary, tf.keras.metrics, etf.keras.optimizer). Подробный список всех изменений см. В Пространства имен TensorFlow.

Модельный дизайн

TensorFlow 2 теперь рекомендует использовать Keras в качестве официального API. Проектировать модели в TensorFlow теперь так же просто, как подключить встроенные слои для написания всего с нуля для исследовательских приложений.

Последовательный API

Последовательный API используется для создания линейных моделей со стеком слоев один поверх другого. Различные слои, такие как Dense, Flatten и Conv2D, добавляются к модели с помощью метода add (). После создания модели вы можете увидеть ее сводку. Последовательный API - это наиболее часто используемый API для создания моделей. Основная идея состоит в том, чтобы сложить несколько слоев, чтобы создать модель, которая позже компилируется и обучается делать выводы.

Функциональный API

Последовательный API строит линейную модель, однако функциональный API используется для построения нелинейной модели. Архитектура этих моделей напоминает ориентированный граф (DAG). Эти модели могут принимать несколько входных данных, создавать несколько выходных данных и совместно использовать слои.

Подклассы

Создание подклассов позволяет нам писать все с нуля. Это дает более тонкий контроль над аспектами создания модели. Платформа предоставляет класс, в котором конструктор определяет используемые слои, а метод вызова объединяет эти слои в определенном порядке. Этот подход рекомендуется, если вы хотите понять, как все работает под капотом.

Дизайн обучения

Использование метода Fit

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

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

Использование обратных вызовов

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

Использование Train on Batch

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

Написание пользовательских обучающих циклов

Функция fit абстрагирует множество деталей при обучении модели. Однако при необходимости TensorFlow 2 позволяет вам смотреть на градиенты сети с помощью GradientTape. Вы также можете увидеть, как обновляются веса, используя эти градиенты. Короче говоря, это дает вам более точный контроль над обновлением веса. Подробный пример настраиваемого цикла обучения доступен здесь.

Распределенное обучение

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

Сериализация

После обучения модель ее необходимо сохранить, чтобы использовать в производстве. При сохранении TensorFlow 2 модель была стандартизирована с использованием формата SavedModel, который сохраняет полную модель вместе с ее весами. Форма SavedModel упрощает развертывание моделей с использованием TensorFlowJS, TensorFlowLite или TensorFlow Serving.

Развертывание

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

Обслуживание TensorFlow позволяет использовать модели машинного обучения в качестве клиентских API REST или gRPC (удаленный вызов процедур). В TensorFlow обслуживание упрощено за счет предоставления файла докера. Подробная документация доступна в официальных документах здесь.

Некоторые передовые практики, о которых следует помнить

Реорганизуйте код как небольшие функции

TensorFlow 1.X следует концепции программирования, когда каждое вычисление загружается заранее и рассчитывается только для выбранных тензоров с помощью команды session.run().

В TensorFlow 2.X парадигма немного отличается - ожидается, что ваш код написан в виде небольших функций, которые будут вызываться при необходимости. В общем, это не обязательно означает, что функции будут «запоминаться» при использовании команды tf.function. Имейте в виду, что tf.function следует использовать только для высокоуровневых вычислений, например, для обучения модели или шага прямой связи с сетью.

Используйте Keras и модели для управления переменными

Keras - это довольно простой инструмент, который можно использовать для обучения моделей, и это в основном связано с тем, что Керас управляет доступными trainable_variables, а не вы, как это происходит в TensorFlow.

Объедините tf.data.Datasets и @ tf.function

Использование tf.data.Dataset - лучший способ перебирать наборы обучающих данных, которые невозможно уместить в памяти. Наборы данных - это итераторы (а не итераторы), которые работают как любые другие итерации Python в режиме ожидания. Вы можете извлечь выгоду из асинхронных ресурсов с предварительной выборкой / потоковой передачей, используя tf.function(), который заменяет взаимодействия Python в графическом режиме. Например:

Если вы используете Keras.fit(), вам не нужно беспокоиться об итерациях набора данных:

Совместимость и преемственность

Теперь вы, вероятно, задаетесь вопросом: «Я уже разработал свои модели с помощью TensorFlow 1.X, как мне обеспечить совместимость?»

Чтобы облегчить жизнь пользователям TensorFlow, была предоставлена ​​структура преобразования кода, которая обновляет ваш код TF1.X до TF2.0 без проблем. Хотя преобразовать каждую строчку кода невозможно, это может быть действительно полезно.
Подробнее читайте здесь.

Вывод

TensorFlow 2.X, несомненно, представил более удобный интерфейс, сохранив при этом некоторые преимущества вычисления графов. Кроме того, также были приняты во внимание масштабируемость, удобство использования в науке о данных и развертывание. До свидания tf привет tf.keras и слава богу, у нас есть EagerExecution.

В ходе следующих постов мы рассмотрим некоторые другие фреймворки, которые TensorFlow 2.X предоставил сообществу разработчиков, например: TensorFlow Extended (TFX), TensorFlow Privacy и TensorFlow Probability.

Если вы хотите узнать больше о TF 2.X, я дам вам несколько рекомендаций:

Фабиана Клементе - директор по данным в YData.

Предоставление доступа к данным с конфиденциальностью по дизайну.

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