TensorFlow или PyTorch? Руководство по библиотекам машинного обучения Python (с примерами!)

Введение

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

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

  • обработка естественного языка / NLP (Tensorflow)
  • визуализация и анализ сложных данных (Theano)
  • распознавание изображений (Caffe)
  • прогнозирование и рекомендации

Появились фреймворки с открытым исходным кодом для решения всех вышеперечисленных задач, и теперь можно запутаться, какую библиотеку использовать для того или иного проекта. Tensorflow или Sci-kit? Использовать ли Keras поверх CNTK от Microsoft? В каком приложении лучше использовать MXNet?

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

  • Ваш уровень уверенности в основах машинного обучения
  • Будете ли вы использовать фреймворк для классических алгоритмов машинного обучения или для глубокого обучения
  • Для каких целей вы будете использовать фреймворк: будь то тяжелые численные вычисления, анализ сложных данных, анализ изображений или образование и исследования
  • Будете ли вы использовать дополнительное оборудование (например, GPU и TPU), программное обеспечение или облачные сервисы для масштабирования на большие массивы данных.

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

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

Library Best Application Can Run on External Hardware Machine Learning or Deep Learning? ML Knowledge required (beginner, intermediate, advanced) Learning Curve
Sci-Kit Learn Learning ML No ML only Beginner Very Low
PyTorch Academic use and production Yes Both Beginners Low
Caffe Image processing Yes Both Mid-level Low
TensorFlow Processing large data sets quickly Yes Both intermediate High
Theano High-speed computation Yes Both Advanced Very High

Среди огромного количества доступных вариантов фреймворков Python с открытым исходным кодом, здесь собраны 5 наших лучших вариантов в порядке убывания.

5. Sci-Kit Learn

Идеально подходит для: начинающих ML

Sci-kit Learn - это библиотека, которая содержит множество классических алгоритмов машинного обучения, таких как вспомогательные векторные машины (SVM), карты KNN, классификаторы K-Nearest Neighbors (KNN), Random Forests и алгоритмы регрессии. Он включает в себя возможности как контролируемого, так и неконтролируемого обучения. Таким образом, в конечном итоге это эффективный инструмент для статистического моделирования.

Он был построен на основе многих других библиотек Python, таких как SciPy, Numpy и Matplotlib, и некоторые из его основных алгоритмов также написаны с использованием Cython. Я создал пример операции Sci-Kit здесь.

Сильные стороны:

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

Слабые стороны:

  • Не поддерживает ИНС
  • Не поддерживает вычисления на GPU

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

Его легко запускать и отлаживать, и есть несколько хороших и простых учебников, которые помогут понять алгоритмы, когда вам придется с ними работать. Однако у Sci-kit Learn есть пара ограничений.

Во-первых, он не поддерживает искусственные нейронные сети.

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

Для более опытных или "жестких" разработчиков это может показаться ограничением, поскольку абстракция не позволяет тонко настраивать базовые алгоритмы.

4. Theano

Идеально подходит для: хардкорных разработчиков, которым требуются высокоскоростные вычисления на одном GPU

Если вы ищете фреймворк, который может обрабатывать цифры как профессионал, то Theano будет вашим лучшим выбором.

Theano - это рабочая лошадка, хорошо оснащенная для численных вычислений, на которую опирается большое количество других фреймворков глубокого обучения, таких как Tensorflow и Keras. Фреймворк позволяет эффективно работать с математическими выражениями, включающими многомерные массивы.

Сильные стороны:

  • Эффективность в обработке больших и многомерных наборов данных
  • Предоставляет разработчику достаточную гибкость для тонкой настройки базовых алгоритмов и создания новых моделей.

Слабость:

  • Очень крутая кривая обучения
  • Не поддерживает масштабирование на нескольких GPU

В то время как Sci-kit Learn предназначен для новичков, Theano - только для продвинутых экспертов в области глубокого обучения.

API является низкоуровневым, поэтому вам действительно нужно чувствовать себя комфортно в своих способностях к кодированию, если вы хотите изучить этот фреймворк. Синтаксис Theano довольно тесно интегрирован с NumPy, и его код может эффективно работать как на CPU, так и на GPU. Вы можете посмотреть пример скрипта, использующего Theano здесь.

В отличие от Sci-kit learn, Theano предоставляет любому разработчику полную гибкость для тонкой настройки и контроля своих моделей. Он даже позволяет разработчику реализовывать и тестировать совершенно нетрадиционные модели.

Хотя Theano работает лучше, чем Tensorflow на одном GPU, он все еще не может сравниться с Tensorflow при работе с несколькими GPU.

Однако, поскольку Theano существует дольше, у него гораздо больше документации. Самым большим недостатком является то, что MILA, создатели Theano, решили прекратить поддержку фреймворка после выхода версии 1.0. Тем не менее, он по-прежнему является отличным выбором для заядлых энтузиастов глубокого обучения.

3. Caffe

Идеально подходит для: Программистов среднего уровня и обработки изображений

Caffe (Convolutional Architecture for Fast Feature Embedding) была создана в основном для поддержки конволюционных нейронных сетей (CNN) и является предпочтительным фреймворком для тех, кто работает над компьютерным зрением, обработкой изображений и фидфорвардными сетями

Фреймворк представляет собой API на базе Python, который в основном был написан на C++. Модели в Caffe представлены конфигурационными файлами Protobuf, и фреймворк, по сути, является самой быстрой реализацией CNN среди всех фреймворков Deep Learning.

Он хорошо работает на задачах сегментации и классификации изображений. С помощью одного GPU Caffe может обработать более 60 миллионов изображений за день! Вот простой пример использования предварительно обученной модели Caffe для правильной идентификации изображения как цифры "5".

Сильные стороны:

  • Имеет отличные готовые к использованию модели для распознавания изображений
  • Это самая быстрая среда реализации CNN
  • Модели и оптимизации настраиваются, а не кодируются

Слабые стороны:

  • Не подходит для RNNs
  • Бедная документация
  • Создание новых слоев требует определения полного обновления вперед, назад и градиента

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

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

Вы также можете проводить обучение на нескольких GPU, но это имеет некоторые ограничения: например, вы не можете проводить параллелизм модели/данных.

Еще один плюс Caffe в том, что у него довольно хорошее сообщество разработчиков - существует целый "Зоопарк моделей", где можно найти множество реализаций и моделей CNN, таких как AlexNet, GoogleNet, NIN и др. Это то, чего не хватает другим платформам.

Хотя фреймворк отлично подходит для CNN и обработки изображений, он не подходит для рекуррентных нейронных сетей (RNN) и приложений, связанных с текстом, звуком и временными рядами данных. Более того, несмотря на то, что существует множество готовых слоев, создание новых слоев может быть утомительным, поскольку необходимо определить полное обновление прямого, обратного и градиента для каждого нового слоя

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

2. Pytorch

Идеально подходит для: как для академического использования, так и для производства

Pytorch был разработан с использованием Python, C++ и бэкенда CUDA. Созданный командой Facebook Artificial Intelligence Research team (FAIR), Pytorch является довольно новым, но уже конкурирует с Tensorflow, и многие предсказывают, что скоро он станет альтернативой многим другим фреймворкам.

Сильные стороны:

  • Кодирование простое, поэтому кривая обучения более пологая
  • Поддерживает динамические графики, так что вы можете настраиваться прямо на ходу.
  • Поддерживает ускорение на GPU

Слабые стороны:

  • Совсем новый, поэтому имеет меньшее сообщество и меньше ресурсов, доступных онлайн

Pytorch особенно хвалят новички, в основном из-за простоты написания кода - но фреймворк, по сути, представляет собой смесь высоко- и низкоуровневых API. В действительности, он подходит как для академического использования, так и для глубокого обучения.

В нем есть несколько предварительно обученных моделей. При кодировании на Pytorch вам не нужно делить числа на типы данных 'int', 'short' или 'double', как в других языках кодирования. Это делает выполнение операций и функций на этом фреймворке более интуитивно понятным по сравнению с другими вариантами. Вы можете посмотреть пример кода для PyTorch здесь.

Однако изюминкой этого фреймворка является то, что он предлагает разработчикам возможность использовать динамические графы. Tensorflow, Theano и их производные позволяют создавать только статические графы, поэтому вам придется определить весь граф для модели, прежде чем вы сможете ее запустить. Однако в Pytorch вы можете определять или корректировать граф во время выполнения, поэтому он более гибкий и позволяет использовать входы переменной длины, особенно в RNN.

Фреймворк также обеспечивает мощную поддержку ускорения GPU, так что вы получаете и эффективность, и скорость.

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

1. Tensorflow

Идеально подходит для: разработчиков среднего уровня и для разработки производственных моделей, которым необходимо быстро обрабатывать огромные массивы данных

Tensorflow в настоящее время называют лучшим ML-фреймворком. За очень короткое время он стал фаворитом для многих разработчиков и является свидетелем постоянно растущего сообщества и необычайного импульса развития.

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

Сильные стороны:

  • Гибкость
  • Содержит несколько готовых к использованию моделей ML и готовых к запуску пакетов приложений
  • Масштабируемость с помощью аппаратного и программного обеспечения
  • Большое онлайн-сообщество

Слабые стороны:

  • Поддерживает только графические процессоры NVIDIA
  • Немного крутая кривая обучения

Архитектура и пользовательский интерфейс Tensorflow отличаются от других фреймворков тем, что узлы графа Tensorflow представляют математические операции, а ребра графа - многомерные массивы (тензоры). Эти тензоры перетекают между узлами, что дает вам большую гибкость при создании новых узлов, в отличие, например, от архитектуры Caffe.

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

Tensorflow можно использовать для множества приложений в рамках машинного обучения. Посмотрите базовую программу "Hello, World" здесь и более традиционный матричный пример здесь.

Но особенностью, которая действительно берет верх, являются вычислительные возможности Tensorflow. На сегодняшний день Tensorflow является сильнейшим соперником в области распределенных вычислений. Он обеспечивает замечательную масштабируемость и позволяет развертывать вычисления на нескольких CPU, GPU, других серверах, мобильных устройствах и Google Cloud Machine Learning Engine. Вы можете сделать это без необходимости переписывать код - это действительно мощно.

Основной недостаток, однако, заключается в том, что на данный момент он поддерживает только графические процессоры NVIDIA. Кроме того, когда дело доходит до поддержки RNN, он в конечном итоге слабее некоторых других фреймворков, а кривая обучения может быть немного круче, чем у Sci-kit и Pytorch.

В целом, с сильной поддержкой Google и огромным онлайн-сообществом, Tensorflow здесь надолго.

Выводы

Подводя итоги, можно сказать, что если Tensorflow завоевал огромную популярность благодаря своей гибкости и возможности распределенной обработки, то Pytorch также постепенно набирает обороты благодаря своей более плоской кривой обучения и способности обрабатывать динамические графы. Оба этих фреймворка являются многоцелевыми и могут применяться для многих типов проектов. Другие фреймворки, такие как Caffe, Theano и Sci-Kit Learn, являются более специализированными и нацелены на решение конкретных задач.

Тем не менее, машинное обучение и искусственный интеллект - это будущее, и эти фреймворки с открытым исходным кодом сделали ML доступным для любого разработчика с действительно большим интересом. Эти библиотеки предоставляют инструменты для любого Pythonista, чтобы практиковать принципы машинного обучения. Выберите фреймворк, который соответствует вашему уровню знаний и области применения, и попробуйте реализовать свой первый проект!

Вернуться на верх