Стандартизация Keras: руководство по высокоуровневым API в TensorFlow 2.0

искусственный интеллект

Основным изменением, внесенным Tensorflow 2.0, является использование keras API в качестве стандартного API верхнего уровня TensorFlow. Поскольку я часто использую keras в кодировании, я доволен этим изменением. Теперь я перевожу документ, опубликованный командой Tensorflow: Стандартизация Keras: руководство по высокоуровневым API в TensorFlow 2.0. Оригинальный адрес:medium.com/tensorflow/…, слегка порезанный. Нажмите, чтобы прочитать исходный текст, чтобы перейти к этой статье, вам нужно перевернуть стену!

Keras — очень популярный высокоуровневый API для создания и обучения моделей глубокого обучения. Он используется в быстром прототипировании, передовых исследованиях и продуктах. Хотя текущий TensorFlow уже поддерживает Keras, в версии 2.0 мы более тесно интегрируем Keras в платформу TensorFlow.

Использование Keras в качестве высокоуровневого API для TensorFlow упрощает начало работы с TensorFlow для новых разработчиков машинного обучения. Единый высокоуровневый API уменьшает беспорядок и позволяет нам сосредоточиться на предоставлении расширенных функций нашим исследователям.

Мы надеемся, что вам понравится пользоваться им так же, как и нам!

Keras имеет несколько ключевых преимуществ:

  • дружелюбный пользователь: Keras имеет простой, согласованный интерфейс, оптимизированный для распространенных сценариев использования. Он предоставляет четкую и действенную обратную связь об ошибках пользователя, а также простые для понимания сообщения об ошибках и часто полезные предложения.
  • Модульный и компонуемый: Модели Keras соединяют вместе настраиваемые строительные блоки с некоторыми ограничениями. Части Keras также можно использовать повторно, не используя фреймворк и даже не зная всего, что предоставляет фреймворк. Например, вы можете использовать слои или оптимизаторы без использования Keras.Modelтренировать.
  • легко расширить: вы можете создавать собственные строительные блоки для выражения новых исследовательских идей, включая новые слои, функции потерь и [вставьте свою идею здесь] для разработки современных идей.
  • Для начинающих и экспертов: Разработчики глубокого обучения имеют разный опыт и опыт, а Keras предоставляет полезные API-интерфейсы, независимо от того, начинаете ли вы или уже имеете многолетний опыт.

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

Сначала ответим на несколько вопросов. Далее мы более подробно рассмотрим, на что способна версия Keras, поставляемая с TensorFlow.

FAQ

Я думал, что Keras — это отдельная библиотека?

Во-первых, Keras — это спецификация API. Эталонная реализация Keras поддерживается как отдельный проект с открытым исходным кодом, и вы можете найти ее на www.keras.io. Проект не зависит от TensorFlow и имеет активное сообщество участников и пользователей. TensorFlow включает полную реализацию Keras API (в модуле tf.keras) с некоторыми улучшениями, специфичными для TensorFlow.

Является ли Keras просто оболочкой TensorFlow или другой библиотеки?

Нет, это распространенное (но понятное) недоразумение. Keras — это стандарт API для определения и обучения моделей машинного обучения. Keras не зависит от реализации: API Keras имеет реализации для TensorFlow, MXNet, TypeScript, JavaScript, CNTK, Theano, PlaidML, Scala, CoreML и других библиотек.

В чем разница между версией Keras, встроенной в TensorFlow, и версией, которую я могу найти на keras.io?

TensorFlow включает в себя реализацию Keras API (в модуле tf.keras) и имеет некоторые специфичные для TensorFlow улучшения, в том числе быстрое выполнение для интуитивно понятной отладки и быстрой итерации, поддержку формата обмена моделями TensorFlow SavedModel и интегрированную поддержку распределенного обучения. включая обучение в ТПУ.

Активное выполнение особенно полезно при использовании API подкласса модели tf.keras. Этот API вдохновлен Chainer и позволяет вам записать прямой проход вашей модели в обязательном порядке. tf.keras тесно интегрирован в экосистему TensorFlow, а также включает поддержку:

  • tf.data, который позволяет создавать высокопроизводительные конвейеры ввода. Вы можете обучить свою модель, используя данные в формате NumPy, если хотите, или tf.data для масштабирования и повышения производительности.
  • Стратегия распределения обучения по различным вычислительным конфигурациям, включая GPU и TPU, распределенные по множеству компьютеров.
  • Экспортируйте модель. Модели, созданные с помощью API tf.keras, можно сериализовать в формат TensorFlow SavedModel, развернуть с помощью TensorFlow Serving или обслуживать с привязками к другим языкам (Java, Go, Rust, C# и т. д.).
  • Экспортированные модели могут быть развернуты на мобильных и встроенных устройствах с помощью TensorFlow Lite, а также доступны в TensorFlow.js (примечание: вы также можете разрабатывать модели непосредственно в JavaScript, используя тот же Keras API).
  • Столбцы функций для эффективного представления и классификации структурированных данных.
  • есть еще.

Как я могу установить tf.keras? Мне все еще нужно установить Keras через pip?

tf.keras входит в состав TensorFlow. Вам не нужно устанавливать Keras отдельно. Например, при работе в Colab Notebook:

!pip install tensorflow
import tensorflow as tf
Dense = tf.keras.layers.Dense

Вы используете tf.keras. Если вы новичок в импорте, вы можете ознакомиться с примерами из последних руководств.

Вы упомянули, что TensorFlow предоставляет разные стили API для начинающих и экспертов. Как это выглядит?

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

Sequential API

Если вы изучаете машинное обучение, мы рекомендуем вам начать с tf.keras Sequential API. Он интуитивно понятен, лаконичен и применим на практике к 95% задач машинного обучения. Используя этот API, вы можете написать свою первую нейронную сеть примерно в 10 строках кода.

Наиболее распространенным способом определения модели является построение графа слоев, а простейшим типом модели является стек слоев. Вы можете определить такую ​​модель с помощью Sequential API следующим образом:

model = tf.keras.Sequential()
model.add(layers.Dense(64, activation=’relu’))
model.add(layers.Dense(64, activation=’relu’))
model.add(layers.Dense(10, activation=’softmax’))
Such a model can then be compiled and trained in a few lines:
model.compile(optimizer=’adam’,
              loss=’sparse_categorical_crossentropy’,
              metrics=[‘accuracy’])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

Дополнительные примеры использования Sequential API можно найти на странице tensorflow.org/tutorials в разделе «Изучение и использование ML».

нажмитездесьПолучите руководство, которое проведет вас через обучение вашей первой нейронной сети набору данных Fashion MNIST с использованием Sequential API.

Functional API

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

При построении модели с использованием функционального API слои можно вызывать (для тензоров) и возвращать тензоры в качестве выходных данных. Затем эти входные и выходные тензоры можно использовать для определения модели. Например:

inputs = tf.keras.Input(shape=(32,))
# A layer instance is callable on a tensor, and returns a tensor.
x = layers.Dense(64, activation=’relu’)(inputs)
x = layers.Dense(64, activation=’relu’)(x)
predictions = layers.Dense(10, activation=’softmax’)(x)
# Instantiate the model given inputs and outputs.
model = tf.keras.Model(inputs=inputs, outputs=predictions)

Такую модель можно скомпилировать и обучить с помощью простых команд, как указано выше. ты сможешьздесьУзнайте больше о функциональном API.

Model Subclassing API

Используйте API создания подклассов моделей для создания полностью настраиваемых моделей, в которых вы можете применить свой собственный прямой проход в этом стиле в теле метода класса. Например:

class MyModel(tf.keras.Model):
 def __init__(self):
   super(MyModel, self).__init__()
   # Define your layers here.
   self.dense_1 = layers.Dense(32, activation=’relu’)
   self.dense_2 = layers.Dense(num_classes, activation=’sigmoid’)
 def call(self, inputs):
   # Define your forward pass here,
   # using layers you previously defined in `__init__`
   x = self.dense_1(inputs)
   return self.dense_2(x)

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

Например:

model = MyModel()
with tf.GradientTape() as tape:
  logits = model(images, training=True)
  loss_value = loss(logits, labels)
grads = tape.gradient(loss_value, model.variables)
optimizer.apply_gradients(zip(grads, model.variables))

Дополнительные примеры стилей подклассов моделей см. на сайте tensorflow.org/tutorials (см. раздел «Исследования и эксперименты»).

Реализовано с использованием API подклассов моделей.Neural Machine Translation with Attention

Реализовано с использованием API подклассов моделей.GAN

Что, если мое исследование не соответствует этим стилям?

Если вы обнаружите, что tf.keras ограничивает вашу область применения, у вас есть много вариантов. ты сможешь:

  • Используйте tf.keras.layers отдельно от определения модели Keras и напишите свой собственный код градиента и обучения. Вы можете использовать tf.keras.optimizers, tf.keras.initializers, tf.keras.losses или tf.keras.metrics индивидуально и независимо.
  • Полностью игнорируйте tf.keras и используйте низкоуровневый TensorFlow API, Python и AutoGraph для достижения своих целей.

Это полностью зависит от вас! Обратите внимание, что необъектно-ориентированные слои в tf.layers будут объявлены устаревшими, а tf.contrib.* (включая высокоуровневые API, такие как tf.contrib.slim и tf.contrib.learn) будет недоступен в TF 2.0.

Что будет с оценщиками?

Оценщики широко используются в Google, а также в более широком сообществе TensorFlow. Несколько моделей были упакованы как готовые оценщики, включая линейные классификаторы, классификаторы DNN, комбинированные линейные классификаторы DNN (также известные как широкие и глубокие модели) и деревья с усилением градиента. Эти модели уже находятся в производстве и широко развернуты, и по всем этим причинам Estimator API (включая готовые оценщики) будет включен в TensorFlow 2.0.

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

Тем не менее, если вы разрабатываете пользовательскую архитектуру, мы рекомендуем использовать tf.keras для построения модели вместо Estimator. Если вы используете инфраструктуру, для которой требуются оценщики, вы можете использовать model_to_estimator() для преобразования модели, гарантируя, что Keras работает в экосистеме TensorFlow.

вы также можете прочитать

  1. Эффективный TensorFlow 2.0: применение лучших практик и изменения
  2. Первые пользователи TensorFlow 2.0

image