TensorFlow умер. Да здравствует TensorFlow 2.0!
Вышло долгожданное обновление фреймворка машинного обучения – TensorFlow 2.0. Что же предлагают разработчики Google в альфа-версии?
Вы новичок в TensorFlow? Поздравляем! Вы выбрали лучшее время, чтобы погрузиться в тематику искусственного интеллекта ;)
Основное преимущество TensorFlow – производительность. Этот инструмент создан для массового переноса моделей с уровня исследований в производство и фактически является промышленным станком для ИИ... но примерно таким же понятным для незнакомого с ним пользователя. Низкоуровневый TensorFlow 1.x труден для изучения и заставляет попотеть желающих открывать планеты или развивать медицину.
Так что многие исследователи ограничивались Keras – высокоуровневым API для построения моделей глубокого обучения слой-за-слоем. Keras создан с нуля на Python. Он гибок и прост, оптимизирован под распространенные задачи глубокого обучения. Плюс он работает с несколькими фреймворками машинного обучения, не только с TensorFlow.
А зачем выбирать между привлекательной удобностью Keras и мощным исполнением традиционного TensorFlow? Действительно, незачем! Эта идея и лежит в основе стратегии TensorFlow 2.0.
Теперь Keras превратился в высокоуровневый API, встроенный в TensorFlow 2.0 по умолчанию в виде tf.keras. Его функционал богаче в сравнении со стандартным интерфейсом и позволяет «дотянуться» до продвинутых функций TensorFlow. С основными особенностями tf.keras можно ознакомиться в русскоязычной документации.
Разработчики Google отказались от всего, что вы могли невзлюбить в TensorFlow 1.x. Магический ритуал, чтобы просто сложить два числа? Забудьте. Сессии TensorFlow? Почили в бозе. Переписывание кода для нового железа или масштабирования? Никогда более. Ужасные сообщения об ошибках? Устранено.
TensorFlow 2.0 – это приятный, меняющий правила игры фреймворк, не только мощный, но и удобный.
Eager execution
В TensorFlow 2.0 по умолчанию в качестве режима выполнения моделей используется Eager execution. То есть вычисление конкретных значений происходит по ходу выполнения, до построения полного вычислительного графа. Это упрощает отладку моделей и устраняет необходимость в шаблонном коде.
В качестве структур данных теперь можно использовать стандартные структуры Python. Вы можете быстро проверять гипотезы и легко отлаживать код на небольших моделях и малом количестве данных. Eager execution также поддерживает ускорение на GPU и распределенные вычисления на множестве машин.
Использование эталонных моделей
TensorFlow 2.0 облегчает внедрение предобученных моделей, «заточенных» под распознавание изображений и речи, обнаружение объектов, рекомендации, обучение с подкреплением и т. д. Такие reference models позволяют «из коробки» применять лучшие практики и служат отправными точками для разработки собственных высокопроизводительных решений.
Для хранения обученных моделей используется концепция SavedModel.
Интеграция TensorBoard и Keras
Экосистема инструментов в TensorFlow 2.0 прошла тщательную очистку от конвейеров обработки данных до экспорта моделей в TensorBoard – инструмент для визуализации процесса обучения, отладки кода и оптимизации обучаемой модели. TensorBoard теперь совмещен с Keras, и может быть вызван однострочным кодом:
tb_callback = keras.callbacks.TensorBoard(log_dir=log_dir) model.fit(x_train, y_train, epochs=5, validation_data=[x_test, y_test], callbacks=[tb_callback])
Рабочий процесс обучения, оптимизации и развертывания модели теперь выглядит так:
- Загрузка данных через tf.data. Данные для обучения считываются через специальные входные конвейеры. Характеристики свойств описываются в tf.feature_column. Поддерживается ввод данных из памяти (например, из NumPy).
- Создание, обучение и валидация модели в tf.keras или из готовых моделей в tf.estimator. Если не хотите обучать модели с нуля, вы можете применить трансферное обучение моделей Keras или Estimator, используя модели из TensorFlow Hub.
- Запуск и дебаггинг с Eager execution с последующей работой над графом с помощью tf.function (проиллюстрировано в блокноте Jupyter). Процесс сохраняет плюсы выполнения графов в TensorFlow 1.x: оптимизация производительности, удаленное выполнение, сериализация, экспорт и развертывание. К старым методикам добавляется гибкость программ на простом Python.
- Использование распределенного обучения. В крупных задачах машинного обучения Distribution Strategy API позволит легко распределять и обучать модели. TensorFlow обеспечивает поддержку различных аппаратных ускорителей – как CPU, так и графических процессоров и TPU, а также конфигураций с несколькими узлами, включая блоки TPU, кластеры Kubernetes и облачные вычисления. Также у TensorFlow есть Lite-версия, позволяющая обучать (или дообучать) модели на мобильных платформах.
- Экспорт в SavedModel. TensorFlow стандартизирует формат SavedModel в качестве формата обмена для TensorFlow, TensorFlow Lite, TensorFlow.js, TensorFlow Hub и сторонних платформ.
Миграция c TensorFlow 1.x на TensorFlow 2.0
TensorFlow 1.x некоторое время еще будет поддерживаться, в том числе в течение года будут выпускаться исправления безопасности для последней вариации первой версии. Но главные силы после выпуска стабильной версии TensorFlow 2.0 будут перекинуты на новую версию и развитие ее экосистемы. Сейчас TensorFlow 2.0 доступен в альфа-версии:
pip install tensorflow==2.0.0-alpha0
Для апгрейда до версии TensorFlow 2.0 команда разработчиков написала upgrade script:
tf_upgrade_v2 --infile tensorfoo.py --outfile tensorfoo-upgraded.py
API в TensorFlow 2.0 стало более связным и ясным, сокращено дублирование функционала. В связи с этим произошли изменения названий множества функций и их расположения. Чтобы избежать проблем с совместимостью, написан модуль tf.compat.v1, содержащий все элементы API 1.x кроме tf.contrib.
При запуске upgrade script все изменения можно посмотреть в логе. В результате обработки скриптом старая программа полностью переходит на новый API. Но для понимания нового, ясного стиля TensorFlow 2.0 нужно внимательно изучить документацию.
Заметим, что сайт TensorFlow тоже существенно изменился, и значительная часть примеров теперь доступна и на русском языке.
Основные источники: первый, второй.