PyTorch vs TensorFlow: в чем разница? Обе библиотеки Python с открытым исходным кодом, которые используют графики для выполнения числовых вычислений над данными. Оба они широко используются в академических исследованиях и коммерческом секторе. Оба они расширены различными API, платформами облачных вычислений и репозиториями моделей.

Если они такие похожие, тогда какой из них лучше всего подходит для вашего проекта?

Содержание

В этом руководстве вы узнаете:

  • В чем разница между PyTorch и TensorFlow.
  • Какие инструменты и ресурсы доступны для каждого.
  • Как выбрать лучший вариант для своего конкретного проекта.
  • Вы начнете с внимательного изучения обеих платформ, начиная с немного более старой версии TensorFlow, прежде чем изучить некоторые соображения, которые помогут вам определить, какой вариант лучше всего подходит для вашего проекта. Давайте начнем!

    Что такое TensorFlow?

    TensorFlow был разработан Google и с открытым исходным кодом выпущен в 2015 году. Он вырос из собственного программного обеспечения Google для машинного обучения, которое было переработано и оптимизировано для использования в производственной среде.

    Название «TensorFlow» описывает, как вы организуете и выполняете операции с данными. Базовая структура данных как для TensorFlow, так и для PyTorch — это тензор. Когда вы используете TensorFlow, вы выполняете операции с данными в этих тензорах, строя граф потока данных с отслеживанием состояния, что-то вроде блок-схемы, которая запоминает прошлые события.

    Кто использует TensorFlow?

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

    После выпуска PyTorch в 2016 году популярность TensorFlow упала. Но в конце 2019 года Google выпустил TensorFlow 2.0, крупное обновление, которое упростило библиотеку и сделало ее более удобной для пользователя, что привело к возобновлению интереса в сообществе машинного обучения.

    Стиль и функция кода

    До TensorFlow 2.0 TensorFlow требовал, чтобы вы вручную сшивали абстрактное синтаксическое дерево — график — с помощью вызовов API tf. *. Затем потребовалось, чтобы вы вручную скомпилировали модель, передав набор выходных тензоров и входных тензоров в вызов session.run ().

    Объект Session — это класс для выполнения операций TensorFlow. Он содержит среду, в которой оцениваются объекты Tensor и выполняются объекты Operation, и может владеть такими ресурсами, как объекты tf.Variable. Наиболее распространенный способ использования сеанса — это диспетчер контекста.

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

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

    >>> import tensorflow as tf
    
    >>> tf.compat.v1.disable_eager_execution()
    
    >>> x = tf.compat.v1.placeholder(tf.float32, name = "x")
    >>> y = tf.compat.v1.placeholder(tf.float32, name = "y")
    
    >>> multiply = tf.multiply(x, y)
    
    >>> with tf.compat.v1.Session() as session:
    ...     m = session.run(
    ...         multiply, feed_dict={x: [ [2., 4., 6.] ], y: [ [1.], [3.], [5.] ]}
    ...     )
    ...     print(m)
    [ [ 2.  4.  6.]
     [ 6. 12. 18.]
     [10. 20. 30.] ]
    

    Этот код использует API tf.compat TensorFlow 2.x для доступа к методам TensorFlow 1.x и отключения активного выполнения.

    Сначала вы объявляете входные тензоры x и y, используя объекты тензора tf.compat.v1.placeholder. Затем вы определяете операцию, которую нужно выполнить с ними. Затем, используя объект tf.Session в качестве диспетчера контекста, вы создаете контейнер для инкапсуляции среды выполнения и выполняете умножение, вводя реальные значения в заполнители с помощью feed_dict. Наконец, все еще внутри сеанса, вы print () результат.

    При активном выполнении в TensorFlow 2.0 все, что вам нужно, это tf.multiply () для достижения того же результата:

    >>> import tensorflow as tf
    
    >>> x = [ [2., 4., 6.] ]
    >>> y = [ [1.], [3.], [5.] ]
    >>> m = tf.multiply(x, y)
    
    >>> m
    
    

    В этом коде вы объявляете свои тензоры, используя нотацию списка Python, а tf.multiply () выполняет поэлементное умножение сразу после его вызова.

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

    Специальные возможности

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

    Вы можете быстро начать использовать TensorFlow из-за большого количества данных,предварительно обученные модели и записные книжки Google Colab, которые предоставляют как Google, так и сторонние компании.

    Многие популярные алгоритмы машинного обучения и наборы данных встроены в TensorFlow и готовы к использованию. Помимо встроенных наборов данных, вы можете получить доступ к наборам данных Google Research или использовать поиск Google по набору данных, чтобы найти еще больше. Keras упрощает настройку и запуск моделей, поэтому вы можете опробовать новые методы за меньшее время. Действительно, Keras — наиболее часто используемый фреймворк глубокого обучения среди пяти лучших команд на Kaggle.

    Одним из недостатков является то, что обновление с TensorFlow 1.x до TensorFlow 2.0 изменило так много функций, что вы можете запутаться. Обновление кода утомительно и чревато ошибками. Многие ресурсы, например учебные пособия, могут содержать устаревшие советы.

    PyTorch не имеет такой большой проблемы с обратной совместимостью, что может быть причиной его предпочтения перед TensorFlow.

    Экосистема Tensorflow

    Некоторые особенности API, расширений и полезных инструментов расширенной экосистемы TensorFlow включают:

    • TensorFlow Hub, библиотека для многоразовых модулей машинного обучения.
    • Model Garden, официальная коллекция моделей, использующих высокоуровневые API TensorFlow.
    • Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow, всестороннее введение в машинное обучение с использованием TensorFlow.
    • Что такое PyTorch?

      PyTorch был разработан Facebook и впервые публично выпущен в 2016 году. Он был создан, чтобы предложить производственную оптимизацию, аналогичную TensorFlow, при этом упрощая написание моделей.

      Поскольку программисты Python сочли его настолько естественным в использовании, PyTorch быстро приобрел пользователей, вдохновляя команду TensorFlow перенять многие из самых популярных функций PyTorch в TensorFlow 2.0.

      Кто использует PyTorch?

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

      В списке самых популярных «Другие фреймворки, библиотеки и инструменты» Stack Overflow Developer Survey за 2020 год указано, что 10.4% профессиональных разработчиков выбирают TensorFlow и 4,1% выбирают PyTorch. В 2018 году этот показатель составлял 7,6 процента для TensorFlow и всего 1,6 процента для PyTorch.

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

      Стиль и функция кода

      PyTorch основан на фреймворке Torch для быстрых вычислений, написанном на C. Torch имеет оболочку Lua для построения моделей.

      PyTorch оборачивает ту же внутреннюю часть C в интерфейс Python. Но это больше, чем просто обертка. Разработчики построили его с нуля, чтобы упростить написание моделей для программистов на Python. Основная, низкоуровневый код на C и C ++ оптимизирован для запуска кода Python. Благодаря такой тесной интеграции вы получаете:

    • Лучшая память и оптимизация.
    • Более понятные сообщения об ошибках.
    • Более детальный контроль структуры модели.
    • Более прозрачное поведение модели.
    • Лучшая совместимость с NumPy.

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

    Активное выполнение PyTorch, которое оценивает тензорные операции немедленно и динамически, вдохновило TensorFlow 2.0, поэтому API для обоих выглядят очень похоже. Преобразование объектов NumPy в тензоры встроено в основные структуры данных PyTorch. Это означает, что вы можете легко переключаться между объектами torch.Tensor и numpy.array.

    Например, вы можете использовать встроенную поддержку PyTorch для преобразования массивов NumPy в тензоры, чтобы создать два объекта numpy.array, превратив каждый в факел. Тензорный объект с помощью torch.from_numpy (), а затем получение их поэлементного произведения:

    >>> import torch
    >>> import numpy as np
    
    >>> x = np.array([ [2., 4., 6.] ])
    >>> y = np.array([ [1.], [3.], [5.] ])
    
    >>> m = torch.mul(torch.from_numpy(x), torch.from_numpy(y))
    
    >>> m.numpy()
    array([ [ 2.,  4.,  6.],
           [ 6., 12., 18.],
           [10., 20., 30.] ])
    

    Использование torch.Tensor.numpy () позволяет распечатать результат умножения матриц — объект torch.Tensor — в виде объекта numpy.array.

    Наиболее важное различие между объектом torch.Tensor и объектом numpy.array заключается в том, что класс torch.Tensor имеет разные методы и атрибуты, такие как backward (), который вычисляет градиент и совместимость с CUDA.

    Специальные функции

    PyTorch добавляет модуль C++ для автоматического дифференцирования в серверную часть Torch. Автоматическое дифференцирование автоматически вычисляет градиент функций, определенных в torch.nn во время обратного распространения ошибки.

    По умолчанию PyTorch использует вычисление в режиме ожидания. Вы можете запускать нейронную сеть по мере ее построения, построчно, что упрощает отладку. Также он позволяет строить нейронные сети с условным исполнением. Это динамическое выполнение более интуитивно понятно для большинства Python.

    Экосистема PyTorch

    Некоторые особенности API, расширений и полезных инструментов расширенной экосистемы PyTorch включают:

    • API fast.ai, который упрощает быстрое создание моделей.
    • TorchServe, сервер модели с открытым исходным кодом, разработанный в сотрудничестве между AWS и Facebook.
    • TorchElastic для масштабного обучения глубоких нейронных сетей с помощью Kubernetes
    • PyTorch Hub, активное сообщество для обмена и распространения передовых моделей.

    Руководство по выбору PyTorch и TensorFlow

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

    Стиль

    Если вы программист на Python, вам будет легко освоить PyTorch. Он работает так, как вы ожидаете, прямо из коробки.

    С другой стороны, в TensorFlow поддерживается больше языков программирования, чем в PyTorch, в котором есть C++ API. Вы можете использовать TensorFlow как в JavaScript, так и в Swift. Если вы не хотите писать много низкоуровневого кода, затем Keras абстрагирует многие детали для типичных случаев использования, чтобы вы могли создавать модели TensorFlow, не вдаваясь в детали.

    Данные и модель

    Какие модели вы используете? Если вы хотите использовать конкретную предварительно обученную модель, например BERT или DeepDream, вам следует изучить, с чем она совместима. Некоторые предварительно обученные модели доступны только в одной или другой библиотеке, а некоторые доступны в обеих. Model Garden и хабы PyTorch и TensorFlow также являются хорошими ресурсами для проверки.

    Какие данные вам нужны? Если вы хотите использовать предварительно обработанные данные, они могут быть уже встроены в одну или другую библиотеку. Посмотрите документацию — это ускорит вашу разработку!

    Цель проекта

    Где будет жить ваша модель? Если вы хотите развернуть модель на мобильных устройствах, то TensorFlow — хороший выбор из-за TensorFlow Lite и его Swift API. Что касается обслуживания моделей, TensorFlow тесно интегрирован с Google Cloud, но PyTorch интегрирован в TorchServe на AWS. Если вы хотите принять участие в соревнованиях Kaggle, тогда Керас позволит вам быстро повторять эксперименты.

    Подумайте над этими вопросами и примерами в самом начале вашего проекта. Определите два или три наиболее важных компонента, и TensorFlow или PyTorch станут правильным выбором.

    Заключение

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

    В этом уроке вы узнали:

    • В чем разница между PyTorch и TensorFlow.
    • Как использовать тензоры для вычислений в каждом.
    • Какая платформа лучше всего подходит для разных проектов.
    • Какие инструменты и данные поддерживает каждый.

    Теперь, когда вы решили, какую библиотеку использовать, вы готовы приступить к построению с их помощью нейронных сетей. Идеи можно найти по ссылкам в разделе «Дополнительная литература».

    Дополнительная литература

    Следующие учебные пособия — отличный способ попрактиковаться в PyTorch и TensorFlow:

    По мотивам PyTorch vs TensorFlow for Your Python Deep Learning Project

Опубликовано Вадим В. Костерин

ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль).

Оставьте комментарий

Ваш адрес email не будет опубликован.