Идея к воплощению.

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

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

Нетерпеливое исполнение

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

Как Numpy

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

tf.function Decorator

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

Чистый API

API TensorFlow был очищен, в него были добавлены пространства имен, такие как tf.keras.layers и tf.keras.losses. Многие пространства имен были переименованы для лучшей организации, например tf.mod был переименован в tf.math.mod. Некоторые конечные точки, такие как tf.rint, устарели. Подробный список всех изменений см. В Пространства имен TensorFlow.

Дизайн данных

Сообщество машинного обучения с течением времени консолидировало ряд полезных наборов данных, некоторые из которых доступны вместе с библиотеками глубокого обучения. Очевидно, вы можете использовать свои собственные данные и создать конвейер ввода для обучения. Например, «flow_from_directory» можно использовать для эффективного чтения изображений и увеличения их на лету. Также можно использовать данные, хранящиеся в файлах, таких как CSV. Однако в TensorFlow 2 есть два варианта с точки зрения наборов данных:

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

Наборы данных Keras предоставляют наборы данных регрессии, такие как жилье в Бостоне, наборы данных классификации изображений, такие как mnist, и наборы данных классификации настроений, такие как imdb. Эти наборы данных доступны в формате numpy и умещаются в памяти.

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

Наборы данных Tensorflow - это более быстрый и эффективный способ использования данных. Это высокопроизводительный формат набора данных. Данные, считываемые с использованием наборов данных TensorFlow, находятся не в формате numpy, а в формате tf.data. Он состоит из большого количества наборов данных, ориентированных на исследования, которые были разделены на следующие категории: аудио, изображения, классификация изображений, обнаружение объектов, структурирование, обобщение, текст, перевод и видео. Эти данные более реалистичны.

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

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

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

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

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

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

Подклассы

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

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

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

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

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

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

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

Использование Fit Generator

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TensorFlowJS позволяет использовать машинное обучение непосредственно в браузере или на стороне сервера с помощью NodeJS. После того, как вы сохранили свою модель, вы можете легко развернуть ее с помощью TensorFlowJS. Модель сначала преобразуется в веб-формат TensorFlowJS, а затем загружается для развертывания.

Вывод

После объединения различных оптимизаторов, показателей, функций потерь и слоев в пространстве имен tf.keras я смог написать более согласованный код в TensorFlow 2. Активное выполнение упростило отладку. Вместо создания сеанса для получения значения тензора теперь я могу просто распечатать его, используя стандартную функцию print Python. Добавление декоратора tf.function позволило оптимизировать функции, написанные с использованием стандартного Python, для повышения производительности с помощью TensorFlow. Я могу легко масштабировать обучение моих моделей, используя стратегии, предоставляемые tf.distribute, без внесения значительных изменений в код.

Кроме того, TensorFlow hub позволяет мне повторно использовать модели машинного обучения с помощью Transfer Learning, что ускоряет процесс обучения. В целом TensorFlow превратился в удобную для разработчиков, но мощную библиотеку искусственного интеллекта.