TensorFlow - это библиотека с открытым исходным кодом для численных расчетов с использованием графов потока данных. Она был первоначально разработан командой Google Brain в рамках исследовательской организации Google Machine Intelligence для машинного обучения и исследований глубоких нейронных сетей, но эта система является достаточно общей, чтобы применяться в самых разных областях. Она достигла версии 1.0 в феврале 2017 года и продолжила быстрое развитие, с 21 000+ коммитами до настоящего времени. В этой статье представлена TensorFlow, ее сообщество с открытым исходным кодом и экосистема, а также освещаются некоторые интересные модели TensorFlow с открытым исходным кодом.
TensorFlow является кросс-платформенной библиотекой. Она работает практически на всем: GPU and CPU, включая мобильные и встроенные платформы, и даже тензорных процессорах (TPU), которые являются специализированными аппаратными средствами для тензорной математики. Они пока малодоступны.
Схема TensorFlow
Механизм распределенного выполнения TensorFlow обеспечивает высокопроизводительное ядро, реализованное на C++ для платформы TensorFlow.
Кроме того, имеются фронтенды Python и C++. Layers API предоставляет более простой интерфейс для широко используемых слоев в моделях глубокого обучения. Помимо этого, используются API более высокого уровня, включая Keras (подробнее на сайте Keras.io) и API Estimator, что упрощает обучение и оценку распределенных моделей.
И, наконец, ряд широко используемых моделей готов к использованию из коробки.
Модель выполнения TensorFlow
Графы
Машинное обучение может быстро развиваться, и модели глубокого обучения могут стать намного большими. Для многих моделей графов вам понадобится распределенное обучение, чтобы иметь возможность выполнять его в разумные сроки. И, как правило, вы захотите, чтобы модели, которые вы разрабатываете, развертывали на нескольких платформах.
В текущей версии TensorFlow вы пишете код для построения графа вычислений, а затем выполняете его. Граф - это структура данных, которая полностью описывает вычисление, которое вы хотите выполнить. Такой подход имеет множество преимуществ:
- он переносим, поскольку граф может быть выполнен немедленно или сохранен для использования позже, и он может работать на разных платформах: процессорах, графических процессорах, TPU, мобильных и встроенных устройствах. Кроме того, он может быть развернут без зависимости от какого-либо кода, который построил граф.
- он трансформируется и оптимизируется, поскольку граф можно преобразовать, чтобы создать более оптимальную версию для данной платформы. Кроме того, могут быть произведены оптимизация памяти или вычислений и найдены компромиссы между ними. Это полезно, например, при поддержке более быстрого мобильного вывода после обучения на более крупных машинах.
- поддержка распределенного выполнения.
Высокоуровневые API TensorFlow в сочетании с графами вычислений обеспечивают богатую и гибкую среду разработки и мощные производственные возможности в одной и той же структуре.
Eager execution
Планируемое дополнение к TensorFlow - eager execution, императивный стиль для написания TensorFlow. Когда вы включаете eager execution, вы будете немедленно запускать ядра TensorFlow, а не строить графы, которые будут выполнены позже.
Почему это важно? Четыре основных причины:
- вы можете легко проверять и отлаживать промежуточные значения в графе;
- вы можете использовать управляющие конструкции Python с TensorFlow API: условные выражения, функции и т.д.;
- Eager execution должно сделать отладку более простой;
- семантика Eager упрощает создание и обучение динамических графов.
Как только вы удовлетворены своим кодом TensorFlow, вы можете легко конвертировать его в граф. Это упростит сохранение, перенос и распространение ваших графов.
TensorFlow и сообщество разработчиков программного обеспечения с открытым исходным кодом
TensorFlow была открыта в значительной степени, чтобы сообщество могло улучшать ее. Команда TensorFlow создала процессы для управления запросами, их проверки, а также для ответов на вопросы на Stack Overflow и в листах рассылки.
Таким образом, к настоящему моменту нас более 890 внешних участников, добавляющих свой код, от небольших исправлений документации до больших дополнений, таких как поддержка OS X GPU или реализация OpenCL (в более широкой организации TensorFlow GitHub было около 1000 уникальных участников, не входящих в состав Google.)
Tensorflow имеет более 76 000 звезд в GitHub, а количество других репозиториев, которые его используют, растет с каждым месяцем - на момент написания этой статьи их насчитывается более 20 000.
Многие из них - учебные пособия, модели, переводы и проекты, созданные сообществом. Они могут стать отличным источником примеров, если вы начинаете изучать машинное обучение.
Stack Overflow мониторится командой TensorFlow, и это хороший способ получить ответы на вопросы (с готовыми ответами на 8 000+ вопросов).
Внешняя версия TensorFlow внутренне ничем не отличается от внутренней, помимо некоторых незначительных различий. К ним относятся интерфейс к внутренней инфраструктуре Google (он никому за пределами Google не нужен), некоторые части, которые еще не готовы. Однако ядро TensorFlow идентично.
В GitHub TensorFlow вы можете найти не только саму TensorFlow, но и полезную экосистему других репозиториев, включая модели, сервисы, TensorBoard, Project Magenta и многие другие (некоторые из них описаны ниже). Вы также можете найти API TensorFlow на нескольких языках (Python, C ++, Java и Go); и сообщество разработало другие привязки, включая C #, Haskell, Julia, Ruby, Rust и Scala.
Производительность и бенчмаркинг
TensorFlow имеет высокие стандарты измерения производительности и прозрачности. Команда разработала набор подробных контрольных показателей и очень тщательно включила все необходимые детали для воспроизведения результатов тестирования. Мы пока не проводили сравнительные тесты, но хотели бы, чтобы другие публиковали всеобъемлющие и воспроизводимые контрольные показатели.
Существует раздел сайта TensorFlow с информацией специально для разработчиков, ориентированных на производительность. Оптимизация часто может быть специфичной для модели, но есть некоторые общие рекомендации, которые часто могут иметь большое значение.
Модели с открытым исходным кодом TensorFlow
Команда TensorFlow открыла большое количество моделей. Вы можете найти их в репозиториях. Для многих из них выпущенный код включает в себя не только модель графа, но и подготовленные весовые коэффициенты модели. Это означает, что вы можете попробовать такие модели из коробки, и вы можете далее настраивать многие из них, используя процесс, называемый переносом обучения.
Вот лишь некоторые из недавно выпущенных моделей (их еще больше):
API обнаружения объектов: это все еще основная задача машинного обучения для создания точных моделей, способных локализовать и идентифицировать несколько объектов в одном изображении. Недавно открытый TensorFlow Object Detection API обеспечивает самые современные модели.
Внедренная модель Object Detection
Внедренная модель Object Detection, полученная от raneko через Flickr, CC BY-2.0.
tf-seq2seq: Google ранее анонсировал Google Neural Machine Translation (GNMT), модель sequence-to-sequence (seq2seq), которая теперь используется в Google Translate. tf-seq2seq - это структура seq2seq с открытым исходным кодом в TensorFlow, которая позволяет легко экспериментировать с seq2seq-моделями и достигать конкурентоспособных результатов.
ParseySaurus - это набор предварительно подготовленных моделей, которые отражают обновление до SyntaxNet. Новые модели используют входное представление на основе символов и намного лучше прогнозируют смысл новых слов, как на основе их написания, так и на том, как они используются в контексте. Они гораздо точнее, чем их предшественники, особенно для языков, где могут быть десятки форм для каждого слова, и многие из этих форм никогда не будут наблюдаться во время обучения, даже в очень большом наборе текста.
Multistyle Pastiche Generator из Magenta Project: «Style transfer» - это то, что происходит под капотом, с такими интересными приложениями, которые применяют стиль рисования к одной из ваших фотографий. Эта модель Magenta расширяет передачу стиля изображения, создавая единую сеть, которая может выполнять более одной стилизации изображения, при необходимости в одно и то же время.
Пример Style transfer
Передача обучения
Многие из моделей TensorFlow включают подготовленные веса и примеры, которые показывают, как вы можете использовать их для передачи обучения, например чтобы обучить свои собственные классификаторы. Обычно вы делаете это, получая информацию о ваших входных данных с предпоследнего слоя обученной модели, которая кодирует полезные абстракции, а затем использует это в качестве входных данных для обучения вашей собственной гораздо меньшей нейронной сети для прогнозирования ваших собственных классов. Из-за мощи усвоенных абстракций дополнительное обучение обычно не требует больших наборов данных.
Например, вы можете использовать передачу обучения с помощью модели классификации изображений Inception для обучения классификатора, который использует ваши специализированные данные изображения.
И вы можете сделать то же самое, чтобы обучить свои собственные классификаторы изображений.
Код Object Detection API предназначен также для поддержки передачи обучения. В репозитории tensorflow/models есть пример того, как вы можете использовать перенос обучения для загрузки обученной модели, предназначенной для создания детектора домашних животных с использованием (несколько ограниченного) набора данных примеров собак и кошек. И, если вы любите енотов больше, чем собак и кошек, см. также это руководство.
Модель «детектор домашних животных», обученная с помощью переноса обучения.
Модель «детектор домашних животных», обученная с помощью переноса обучения, полученная от raneko через Flickr, CC BY-2.0.
Использование TensorFlow на мобильных устройствах
Мобильные устройства - отличный вариант использования TensorFlow. Это имеет смысл, когда у вас плохое или отсутствующее сетевое подключение или где непрерывная отправка данных на сервер будет слишком дорогостоящей. Но, как только вы подготовили свою модель, и готовы начать ее использовать, вы не хотите, чтобы размер ее на устройстве был слишком большим.
TensorFlow работает над тем, чтобы помочь разработчикам создавать недорогие мобильные приложения, продолжая уменьшать размер кода и поддерживая квантование.
(см. также Accelerated Linear Algebra [XLA], специфичный для домена компилятор линейной алгебры, который оптимизирует вычисления TensorFlow.)
Один из проектов TensorFlow, MobileNet, разрабатывает набор моделей компьютерного зрения, которые специально разработаны для решения компромиссов скорости и точности, которые необходимо учитывать на мобильных устройствах или во встроенных приложениях. Модели MobileNet также можно найти в репозитории моделей TensorFlow.
Одна из новых демонстрационных версий для Android TF Detect использует модель MobileNet, разработанную с использованием Tensorflow Object Detection API.
TF Detect
Экосистема TensorFlow
В экосистеме TensorFlow есть много инструментов и библиотек, которые помогут вам работать более эффективно. Вот некоторые из них.
TensorBoard
TensorBoard - это набор веб-приложений для проверки, визуализации и понимания ваших запусков и графов TensorFlow. Вы можете использовать TensorBoard для просмотра графов модели TensorFlow и увеличения размера деталей подразделов графа.
Вы можете отображать такие показатели, как ошибки и точность во время цикла обучения; гистограмму визуализации того, как тензор меняется с течением времени; показать дополнительные данные, например изображения; собирать метаданные времени выполнения, такие как использование общей памяти и тензорных форм для узлов; и так далее.
TensorBoard
TensorBoard работает, читая файлы TensorFlow, содержащие сводную информацию о процессе обучения. Эти файлы можно создавать при запуске заданий TensorFlow.
Вы можете использовать TensorBoard для сравнения обучающих прогонов, сбора статистики времени выполнения и создания гистограмм.
Сравнение оптимизаторов
Особенно завораживающей особенностью TensorBoard является встроенный визуализатор. Встраивание повсеместно встречается в машинном обучении, и в контексте TensorFlow часто естественно рассматривать тензоры как точки в пространстве, поэтому почти любая модель TensorFlow приведет к различным встраиваниям.
Datalab
Jupyter notebook - это простой способ интерактивного изучения ваших данных, определения моделей TensorFlow и запуска обучающих прогонов. Если вы используете инструменты и продукты Google Cloud Platform как часть вашего рабочего процесса, возможно, используя Google Cloud Storage или BigQuery для ваших наборов данных или Apache Beam для предварительной обработки данных, тогда Google Cloud Datalab предоставляет среду Jupyter со всеми этими инструментами (и другими, такими как NumPy, pandas, scikit-learn и Matplotlib) предустановленные вместе с TensorFlow, и объединенные с нею. Datalab является продуктом с открытым исходным кодом, поэтому вы можете легко менять его.
Facets
Мощь машинного обучения зависит от его способности выделять паттерны из больших объемов данных, поэтому понимание ваших данных может иметь решающее значение для создания мощной системы машинного обучения.
Facets - это недавно созданный инструмент визуализации данных с открытым исходным кодом, который помогает вам понять ваши наборы данных для машинного обучения и получить представление о форме и характеристиках каждой функции и сразу увидеть, как функции взаимодействуют друг с другом. Например, вы можете просмотреть свои обучающие и тестовые наборы данных (как это делается здесь с некоторыми данными Census), сравнить характеристики каждой функции и отсортировать функции по «distribution distance».
Изучение данных Census с Facets.
Cloud Datalab включает интеграцию Facets. Эта ссылка GitHub содержит небольшой пример загрузки общедоступного набора данных NHTSA Traffic Fatality BigQuery и просмотра его с помощью Facets.
В представлении «Dive» Facets мы можем быстро увидеть, какие штаты имеют наибольшую смертность в результате дорожно-транспортных происшествий, и что распределение типов столкновений меняется, поскольку число погибших на один случай аварии увеличивается.
И далее...
Другим полезным диагностическим инструментом является отладчик TensorFlow, tfdbg, который позволяет просматривать внутреннюю структуру и состояния графов TensorFlow во время обучения и вывода.
После того, как вы подготовили модель, которой вы довольны, следующий шаг - выяснить, как вы будете обслуживать ее, чтобы масштабировать поддержку прогнозов на модели. TensorFlow Serving - это высокопроизводительная обслуживающая система для моделей машинного обучения, предназначенных для применения в индустрии. Недавно она перешла на версию 1.0.
Есть много других инструментов и библиотек, для которых у нас не хватило места здесь, но вы можете просмотреть репозитории TensorFlow GitHub org, чтобы узнать о них.
На сайте TensorFlow есть много руководств, примеров и руководств. (интересный новый учебник - это пример распознавания звука.).
Комментариев нет:
Отправить комментарий