Переход от TensorFlow Estimators к моделям Keras представляет собой значительную эволюцию в рабочем процессе и парадигме создания, обучения и развертывания моделей машинного обучения, особенно в экосистемах TensorFlow и Google Cloud. Это изменение не просто сдвиг в предпочтениях API, но отражает более широкие тенденции в доступности, гибкости и интеграции современных методов глубокого обучения.
Предыстория: Оценщики TensorFlow
TensorFlow Estimators были введены для стандартизации процесса обучения, оценки и развертывания моделей машинного обучения. Estimator API предоставил высокоуровневую абстракцию для распределенного обучения, простое развертывание на различных платформах (включая Google Cloud AI Platform) и встроенную поддержку для различных задач машинного обучения, таких как классификация, регрессия и даже пользовательское моделирование.
Рабочий процесс оценщика обычно включает в себя:
– Определение функции ввода для чтения данных.
– Написание `model_fn` для инкапсуляции логики модели, потерь и оптимизаторов.
– Создание объекта `Estimator`.
– Вызов таких методов, как `.train()`, `.evaluate()` и `.predict()`.
Оценщики обеспечивали четкое разделение между вводом данных, построением модели и выполнением, что было особенно ценно для масштабируемого обучения и обслуживания. Они также обрабатывали большую часть шаблонного кода, необходимого для распределенного обучения и управления контрольными точками.
Однако API Estimator имел несколько ограничений:
– Для новичков, особенно тех, кто только знакомится с глубоким обучением, он был менее интуитивно понятен.
– Настройка моделей (особенно для динамических архитектур) была обременительной.
– Интеграция с новыми функциями (например, пользовательскими слоями или потерями), представленными в сообществе глубокого обучения, была медленнее и сложнее.
Расцвет моделей Keras
Keras изначально разрабатывался как независимая, удобная для пользователя библиотека нейронных сетей. Он подчеркивал простоту и быстрое прототипирование с помощью краткого и последовательного API. Когда TensorFlow принял Keras в качестве своего официального API высокого уровня с выпуском TensorFlow 2.x, это стало признанием ценности, которую Keras привнес в сообщество.
Основные преимущества моделей Keras
1. Простота и читабельность: Модели Keras, как правило, проще понимать и писать, что снижает когнитивную нагрузку на практиков и исследователей.
2. Гибкость: Функциональные и подклассифицирующие API Keras позволяют создавать сложные и динамические модели, например, те, которые требуются для моделирования последовательностей, механизмов внимания или генеративных моделей.
3. Интеграция с современной экосистемой глубокого обучения: Модели Keras могут легко включать пользовательские слои, метрики, потери и обратные вызовы, что упрощает внедрение последних достижений исследований.
4. Комплексные рабочие процессы: В Keras предварительная обработка данных, создание модели, обучение, оценка и развертывание тесно интегрированы.
5. Собственная поддержка в TensorFlow 2.x: При использовании активного выполнения по умолчанию отладка и проверка модели становятся более простыми.
Keras как API высокого уровня по умолчанию в TensorFlow
Начиная с TensorFlow 2.x, Keras (`tf.keras`) является предпочтительным и рекомендуемым высокоуровневым API для определения и обучения моделей. Этот сдвиг отражен в документации, поддержке сообщества и продолжающейся разработке функций. Хотя Estimators по-прежнему поддерживаются для обратной совместимости и определенных вариантов использования, новые функции и улучшения сосредоточены на API Keras.
Пример: простая классификация с оценщиком против Keras
Использование оценщика:
python import tensorflow as tf def model_fn(features, labels, mode): net = tf.layers.dense(features['x'], 10, activation=tf.nn.relu) logits = tf.layers.dense(net, 3, activation=None) predicted_classes = tf.argmax(logits, 1) if mode == tf.estimator.ModeKeys.PREDICT: predictions = { 'class_ids': predicted_classes[:, tf.newaxis], 'probabilities': tf.nn.softmax(logits), 'logits': logits, } return tf.estimator.EstimatorSpec(mode, predictions=predictions) loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits) if mode == tf.estimator.ModeKeys.TRAIN: optimizer = tf.train.AdamOptimizer() train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step()) return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op) eval_metric_ops = { 'accuracy': tf.metrics.accuracy(labels=labels, predictions=predicted_classes) } return tf.estimator.EstimatorSpec( mode, loss=loss, eval_metric_ops=eval_metric_ops) estimator = tf.estimator.Estimator(model_fn=model_fn) # Data input functions omitted for brevity.
Использование Keras:
python import tensorflow as tf from tensorflow import keras model = keras.Sequential([ keras.layers.Dense(10, activation='relu', input_shape=(input_dim,)), keras.layers.Dense(3, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5, batch_size=32)
Как видно выше, код Keras более лаконичен и доступен, поддерживает быструю итерацию и экспериментирование.
Как Keras заменяет оценщиков в рабочих процессах машинного обучения Google Cloud
1. Обучение и развертывание
На Google Cloud AI Platform (теперь Vertex AI) пользователи исторически использовали Estimators для распределенного обучения и обслуживания. С принятием Keras в качестве стандарта платформа полностью поддерживает модели Keras как для обучения, так и для развертывания:
– Распределенное обучение: Модели Keras можно обучать на нескольких GPU или TPU с помощью API `tf.distribute`. Это полностью совместимо с распределенной инфраструктурой Google Cloud.
– Экспорт и обслуживание модели: Модели Keras можно сохранять в формате TensorFlow SavedModel, который является стандартом для обслуживания моделей в Google Cloud.
– Настройка гиперпараметра: Модели Keras интегрируются со службами настройки гиперпараметров Google Cloud, что позволяет пользователям эффективно оптимизировать свои модели.
2. Конвейеры ввода данных
Keras легко интегрируется с конвейерами `tf.data`, облегчая масштабируемую и эффективную загрузку данных, предварительную обработку и дополнение. Это позволяет специалистам обрабатывать большие наборы данных и сложные этапы предварительной обработки с минимальным кодом.
3. Архитектуры пользовательских моделей
В то время как создание пользовательских слоев, потерь и обучающих циклов в API Estimator может быть обременительным, Keras предоставляет интуитивно понятные механизмы для подклассификации моделей и слоев, позволяя исследовательским и производственным группам с большей легкостью реализовывать самые современные архитектуры.
4. Мониторинг и обратные вызовы
Keras поддерживает широкий спектр обратных вызовов — инструментов, которые позволяют контролировать обучение, регулировать скорость обучения, сохранять контрольные точки, выполнять раннюю остановку и интегрироваться с TensorBoard.
5. Интеграция сообщества и экосистемы
Многие популярные наборы данных, предварительно обученные модели и исследовательские вклады теперь распространяются как совместимый с Keras код. Это упрощает пользователям Google Cloud использование передовых исследований в своих рабочих процессах.
Переход с Estimators на Keras: соображения
Организации или отдельные лица с существующими кодовыми базами, построенными вокруг Estimators, могут перейти на Keras с различной степенью усилий, в зависимости от сложности модели и пользовательского кода. TensorFlow предоставляет руководства по миграции и инструменты для облегчения этого процесса.
– Пользовательская логика модели: Пользовательская логика `model_fn` в Estimators часто транслируется в пользовательские классы моделей Keras.
– Стратегии распределенного обучения: Распределенное обучение с помощью Keras использует API `tf.distribute`, который является более гибким и мощным по сравнению со стратегиями распределения Estimator.
– Обслуживание и экспорт: Модели Keras, сохраненные в формате SavedModel, могут обслуживаться с помощью TensorFlow Serving или развертываться на Vertex AI без дополнительных модификаций.
Пример: развертывание модели Keras в Google Cloud Vertex AI
1. Определить и обучить модель
python import tensorflow as tf from tensorflow import keras model = keras.Sequential([ keras.layers.Dense(64, activation='relu', input_shape=(32,)), keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10, batch_size=32)
2. Экспорт модели
python model.save('saved_model/')
3. Загрузить в облачное хранилище Google
gsutil cp -r saved_model gs://my-bucket/path/to/model/
4. Развертывание на Vertex AI
Используя Google Cloud Console или CLI `gcloud`, модель можно развернуть для служб прогнозирования.
Этот рабочий процесс подчеркивает рациональный характер использования Keras в современных конвейерах машинного обучения.
Устранение ограничений и обеспечение обратной совместимости
Хотя Keras охватывает широкий спектр потребностей машинного обучения, некоторые устаревшие рабочие процессы или особые требования (например, некоторые низкоуровневые функции распределенного обучения) могут по-прежнему требовать использования Estimators. Однако текущая разработка в TensorFlow и экосистеме Google Cloud Machine Learning ориентирована на дальнейшее расширение возможностей Keras, обеспечение паритета функций и поддержку миграции.
Дидактическая ценность и образовательное воздействие
Этот сдвиг в сторону Keras имеет глубокие последствия для преподавания и изучения машинного обучения:
– Снижение барьера для входа: Ясный и лаконичный синтаксис Keras позволяет студентам и новичкам сосредоточиться на основных концепциях, а не на шаблонном коде.
– Быстрое прототипирование и экспериментирование: Возможность быстро изменять архитектуру и параметры обучения поддерживает экспериментальное обучение.
– Соответствие отраслевым стандартам: Keras широко используется как в академических исследованиях, так и в промышленных приложениях, поэтому его изучение готовит пользователей к решению реальных задач.
– Бесшовное продвижение: Обучающиеся могут начать с простых последовательных моделей и постепенно переходить к более сложным пользовательским подклассам, не меняя фреймворки.
Экосистема и будущие направления
Более широкая экосистема TensorFlow (включая TensorFlow Hub, TensorFlow Lite, TensorFlow Extended и TensorFlow Serving) приняла Keras в качестве основного интерфейса моделей, гарантируя, что модели, созданные с помощью Keras, будут переносимы на различные платформы — облачные, мобильные, веб- и периферийные устройства.
Инструменты для исследований, учебные пособия и образовательный контент теперь в основном сосредоточены на Keras, что еще больше укрепляет его статус как инструмента по умолчанию для новых проектов.
Примеры, иллюстрирующие основные возможности Keras
Пользовательские циклы обучения
Keras поддерживает как высокоуровневый метод `.fit()`, так и пользовательские циклы обучения с использованием `tf.GradientTape`:
python class MyModel(tf.keras.Model): def __init__(self): super(MyModel, self).__init__() self.dense1 = tf.keras.layers.Dense(64, activation='relu') self.dense2 = tf.keras.layers.Dense(10, activation='softmax') def call(self, inputs): x = self.dense1(inputs) return self.dense2(x) model = MyModel() optimizer = tf.keras.optimizers.Adam() loss_fn = tf.keras.losses.CategoricalCrossentropy() for epoch in range(epochs): for x_batch, y_batch in train_dataset: with tf.GradientTape() as tape: logits = model(x_batch) loss = loss_fn(y_batch, logits) gradients = tape.gradient(loss, model.trainable_weights) optimizer.apply_gradients(zip(gradients, model.trainable_weights))
Достичь такого уровня гибкости с помощью Estimators было непросто.
Интеграция с tf.data
Эффективные конвейеры данных можно построить следующим образом:
python train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)) train_dataset = train_dataset.shuffle(buffer_size=1024).batch(32) model.fit(train_dataset, epochs=5)
Такая интеграция поддерживает крупномасштабную обработку и дополнение данных.
Сериализация и переносимость модели
Модели Keras можно экспортировать в формат SavedModel, что позволяет:
– Развертывание с TensorFlow Serving
– Преобразование в TensorFlow Lite для мобильных и встраиваемых устройств
– Совместное использование с TensorFlow Hub или Model Garden
Настройка гиперпараметра
Модели Keras напрямую интегрируются с автоматизированными инструментами настройки гиперпараметров, такими как Keras Tuner и Vertex AI Vizier от Google Cloud.
{{EJS15}}Ключевые различия: Estimator и Keras на практике
Особенность | Оценщик TensorFlow | Модель Keras (tf.keras) |
---|---|---|
Стиль API | Функционально через `model_fn`, часто многословно | Объектно-ориентированный, лаконичный |
Настройка | Ограничено, через пользовательскую логику model_fn | Высокий, через функционал и подклассы |
Ввод данных | Требуются специальные функции ввода | Интегрировано с `tf.data` |
Распределенное обучение | Встроенный, но менее гибкий | Гибкость через `tf.distribute` |
Модель Экспорта | SavedModel, часто больше шагов | SavedModel, сохранение в одну строку |
Интеграция с экосистемой | Несколько изолирован | Полная интеграция |
Поддержка сообщества и исследований | Уменьшая | Широко распространенный |
Отладка | Статичные графики, менее интуитивные | Быстрое выполнение, более легкая отладка |
FAQ: вопросы, связанные с переходом
Можно ли использовать старые модели Estimator с Keras?
Хотя модели Estimator и модели Keras различны, TensorFlow предоставляет утилиты для конвертации или обертывания моделей Estimator для использования в рабочих процессах обслуживания. Однако для новой разработки рекомендуется использовать Keras.
Существуют ли случаи, когда оценщики являются предпочтительными?
В редких случаях, связанных с устаревшими распределенными учебными рабочими процессами или специализированными требованиями, Estimators все еще могут использоваться. Тем не менее, эти сценарии становятся все более редкими по мере расширения возможностей Keras.
Каким образом Keras поддерживает крупномасштабные производственные рабочие нагрузки?
Keras интегрируется с функциями производительности TensorFlow, включая обучение со смешанной точностью, стратегии распределения и оптимизированные входные конвейеры, что делает его пригодным для корпоративного использования.
Поддерживает ли Keras модели, не являющиеся нейронными сетями?
Keras в первую очередь предназначен для нейронных сетей. Для некоторых классических алгоритмов машинного обучения (например, случайных лесов, бустинга) предпочтительны другие библиотеки (например, scikit-learn или TensorFlow Decision Forests).
Дидактическая рекомендация
Как для новичков, так и для профессионалов настоятельно рекомендуется инвестировать время в изучение Keras. Учебники, учебники и MOOC теперь используют Keras в качестве стандарта для обучения глубокому обучению. Понимание API Keras обеспечивает совместимость с лучшими современными практиками в области машинного обучения и развертывания в облаке.
Другие недавние вопросы и ответы, касающиеся EITC/AI/GCML Машинное обучение Google Cloud:
- Какие распространенные алгоритмы искусственного интеллекта/машинного обучения следует использовать для обработки данных?
- Как настроить конкретную среду Python с помощью Jupyter Notebook?
- Как использовать TensorFlow Serving?
- Что такое Classifier.export_saved_model и как его использовать?
- Почему регрессия часто используется в качестве предиктора?
- Актуальны ли множители Лагранжа и методы квадратичного программирования для машинного обучения?
- Можно ли применять более одной модели в процессе машинного обучения?
- Может ли машинное обучение адаптировать используемый алгоритм в зависимости от сценария?
- Каков самый простой путь к базовому обучению и развертыванию дидактической модели ИИ на платформе Google AI с использованием бесплатного уровня/пробной версии с использованием графической пользовательской консоли в пошаговой манере для абсолютного новичка без опыта программирования?
- Как на практике обучить и развернуть простую модель ИИ в Google Cloud AI Platform с помощью графического интерфейса консоли GCP в пошаговом руководстве?
Просмотреть дополнительные вопросы и ответы в EITC/AI/GCML Google Cloud Machine Learning