PyTorch, TensorFlow и Keras — фреймворки для создания моделей глубокого обучения. У них есть свои особенности и области применения. Выбор между PyTorch, TensorFlow и Keras зависит от конкретных задач и предпочтений разработчика.
PyTorch
PyTorch делает акцент на гибкости и простоте использования. Фреймворк использует динамические графы, позволяющие изменять структуру сети «на лету». PyTorch следует «питоническому» стилю программирования и тесно интегрирован с основными конструкциями Python. Поддерживает Python, C++, и Java.
PyTorch — фреймворк машинного обучения для языка Python с открытым исходным кодом. Создан на базе Torch, библиотеки для языка Lua, которая предназначена для математических расчётов и машинного обучения.
Чаще всего глубокое обучение и в частности PyTorch используются в следующих отраслях:
- распознавание образов на изображениях;
- компьютерное зрение, обнаружение движущихся объектов;
- поиск закономерностей, анализ данных, в том числе неструктурированных;
- обработка естественного языка, распознавание речи и машинный перевод;
- создание машинных описаний для изображений;
- анализ текстов и поиск в них информации;
- генерация текстового контента и картинок.
Особенности фреймворка:
- Динамические вычисления. Граф вычислений динамически пересчитывается «на лету».
- Автоматическое дифференцирование. Фреймворк поддерживает эту математическую операцию, с помощью которой пересчитывают веса.
- Поддержка технологии CUDA. Позволяет запускать вычисления и на процессоре, и на видеокарте. CUDA работает только с видеокартами NVIDIA, причем не со всеми. Так что не каждая конфигурация компьютера подойдет для ее использования.
Тензоры.
Тензорами называют многомерные массивы - структуры данных, больше всего напоминающие математические матрицы. С их помощью строятся модели для машинного обучения, хранится и обрабатывается информация, с которой работает модель.
Тензоры в PyTorch похожи на аналогичные в NumPy. Их можно создавать из Python-массивов или генерировать с помощью специальной функции. Значения внутри матрицы могут быть целочисленными, знаковыми и беззнаковыми, а также дробными с плавающей точкой. Автоматического приведения типов тут нет, в отличие от NumPy, поэтому можно не опасаться, что программа автоматически присвоит значениям тип, отнимающий слишком много памяти.
Две особенности тензоров в PyTorch:
- Они оптимизированы для автоматического дифференцирования, то есть поиска производной «на каждом шаге».
- Их можно запускать и на основных процессорных мощностях, и на видеокарте, перемещать с обычного процессора на графический и обратно.
Встроенные операции. С тензорами можно выполнять разнообразные операции: сложение, вычитание, слияние и другие. Полный спектр математических операций для тензоров позволяет полноценно работать с ними. Иногда PyTorch применяют исключительно для тензорных вычислений — его возможности для этого подходят.
Чаще всего в работе с PyTorch пользуются различными математическими операциями над тензорами, а также функциями инициализации, которые позволяют быстро создавать тензор. Есть и BLAS-функции — так в программировании называют реализацию функций линейной алгебры.
Кроме того, тензоры PyTorch можно конвертировать в тензоры NumPy и обратно — для этого тоже есть специальные функции.
Datasets.
Датасет — это набор данных для машинного обучения. Обычно наборы бывают двух видов: для обучения и для проверки, как работает обученная модель. В большинстве ML-фреймворков, в том числе PyTorch, есть встроенные датасеты. Это наборы популярных и известных в сообществе пакетов данных.
Для решения серьезных задач такие датасеты вряд ли подойдут, но они бывают нужны для прототипирования или при сравнительном анализе моделей. Быстрее и удобнее загрузить в сравниваемые модели тестовые датасеты и посмотреть на результаты, чем составлять и загружать реальные. К тому же реальные наборы данных зачастую больше весят, дольше обрабатываются и сильнее нагружают мощности.
Data Loader. Data Loader — это модуль, который позволяет создавать мини-пакеты в рамках одного датасета и подгружать их в модель. С его помощью можно перемешивать данные, определять размер мини-пакета и выполнять другие действия.
Репозитории. На GitHub существует несколько репозиториев с библиотеками и расширениями PyTorch для конкретных задач. Например, Transformers — решение для распознавания естественного языка: текста, звуков, чтения с картинок. Или Detectron2 — библиотека компьютерного зрения, которая умеет распознавать движущиеся объекты, сегментировать их и выделять ключевые точки.
Другие инструменты. В экосистеме PyTorch десятки библиотек, которые помогают быстрее и удобнее интерпретировать результаты, визуализировать и отслеживать их, создавать датасеты для обучения и делать многое другое. Вот несколько примеров.
- Weights and Biases — научный инструмент для отслеживания результатов экспериментов.
- Clear ML — также менеджер экспериментов и средство управления версиями.
- Tensorboard — набор инструментов для визуализации, который изначально создавался для TensorFlow, но потом был интегрирован в PyTorch.
- Torchgeo — набор датасетов, моделей и инструментов для программ, работающих с геопространственной информацией.
- MONAI — решение для оптимизации PyTorch под задачи в сфере медицины.
PyTorch разрабатывается преимущественно группой искусственного интеллекта Facebook. У PyTorch открытый исходный код, он распространяется бесплатно.
TensorFlow
TensorFlow изначально создавался с прицелом на промышленное применение и масштабируемость. Фреймворк предлагает комплексное решение TensorBoard для визуализации процесса обучения, а также TensorFlow Extended (TFX) для построения полного конвейера машинного обучения. Поддерживает python, JavaScript, C++, Go, Java, Swift, R, C#, Haskell.
TensorFlow — открытая программная библиотека для машинного обучения, разработанная компанией Google.
Она позволяет строить и тренировать нейронные сети для автоматического нахождения и классификации образов.
Примеры использования TensorFlow: распознавание естественного языка, изображений и рукописных текстов, разнообразные задачи классификации или кластеризации, обработка больших данных.
Библиотеку можно использовать для обучения моделей на смартфонах и умных устройствах (TensorFlow Lite) и создания корпоративных нейросетей (TensorFlow Extended).
TensorFlow бесплатна, у неё открытый исходный код, который можно просмотреть на GitHub.
Особенности TensorFlow
- В TensorFlow модели представлены с помощью графов — математических абстракций, которые состоят из вершин и путей между ними. Граф можно сравнить со схемой дорог между разными точками. В программировании это обычно нужно при решении «маршрутных» задач и при создании нейронных сетей.
- TensorFlow работает с тензорами — многомерными структурами данных в векторном, то есть направленном пространстве. Они используются в линейной алгебре и физике. Отсюда происходит название библиотеки. С помощью тензоров описываются пути графа, а вершины — это математические операции.
- Вычисления в TensorFlow выражаются как потоки данных через граф. Это означает, что информация «движется» по графу, передается по путям от вершины к вершине.
- Библиотека может работать на мощностях обычного центрального процессора (CPU) или задействовать мощности графического процессора (GPU). Режим переключается в коде. Существует специальный тензорный процессор TPU, созданный разработчиками библиотеки, — им можно воспользоваться через облачные сервисы Google.
Преимущества TensorFlow
Высокий уровень абстракции
Библиотека написана так, что не нужно думать о технической реализации абстрактных понятий. Можно сосредоточиться на описании логики программы и на математике, а способ реализации вычислений — задача TensorFlow, а не программиста. Это облегчает разработку и позволяет сконцентрироваться на важных задачах.
Интерактивная разработка
TensorFlow позволяет работать с компонентами модели по отдельности и создавать ее «на ходу», при этом отдельно проверять каждый элемент. Это удобнее, чем описывать граф как единую монолитную структуру. Подход делает разработку более интерактивной — структуру можно гибко настраивать и менять.
Гибкость
TensorFlow можно пользоваться для создания нейронных сетей, для глубокого обучения и других направлений ML. Его функции разнообразны для решения широкого спектра задач. Благодаря графам и тензорам в TensorFlow можно легко изобразить сложную математическую структуру.
Гибкость касается не только функций, но и технической стороны вопроса: библиотека работает и с центральным, и с графическим процессором, ее легко использовать с другими инструментами для машинного обучения. Например, TensorFlow применяют с API Keras.
Кроссплатформенность
TensorFlow, как и сам Python, работает в популярных операционных системах, локально или в облаке. У нее есть расширения для мобильных устройств, IoT и браузерных приложений. Для мобильных устройств и интернета вещей можно воспользоваться средой TensorFlow Lite. А если модель машинного обучения должна работать в браузере, подойдет TensorFlow.js — версия для использования с JavaScript и Node.js.
Большое сообщество
TensorFlow — популярная библиотека, поэтому на многие вопросы легко можно найти ответ в сообществе. Оно развивает технологию, создает новые продукты и дополнения, связанные с TensorFlow, пишет документацию и туториалы. Все это облегчает старт и позволяет извлечь из библиотеки максимум пользы.
Недостатки TensorFlow
Собственные стандарты
TensorFlow — продукт Google. Компания известна собственными стандартами для технологий. Первая версия библиотеки предназначалась для внутреннего использования. До сих пор в TensorFlow встречается неочевидное поведение, из-за которого код может быть сложнее отлаживать. Сложности можно компенсировать, если внимательно изучать документацию и пользоваться дополнительными инструментами для отладки.
Высокое потребление памяти
Если TensorFlow используется с графическим процессором, она забирает всю его память. Это снижает производительность. Например, если моделей несколько и они написаны на разных фреймворках, TensorFlow отнимет видеопамять у других — возникнет ошибка. Чтобы такого не было, потребление памяти библиотекой надо ограничивать вручную.
Сложность в изучении
Это касается машинного обучения в целом. С TensorFlow сложности могут возникнуть из-за ее специфичных стандартов — это не самая дружелюбная к новичкам библиотека.
TensorFlow устанавливается с помощью pip, пакетного менеджера для Python. Версии для работы с CPU и GPU скачиваются по отдельности. Также для корректной работы нужна Anaconda — специальный дистрибутив Python для машинного обучения.
Keras
Keras относительно легко освоить новичкам. Фреймворк позволяет работать с различными бэкендами и проводить обучение и тестирование на разных бэкендах для дополнительной валидации качества модели. По сути, это библиотека python с R интерфейсом. Она позволяет быстрее создавать и настраивать модели — схемы, по которым распространяется и подсчитывается информация при обучении. Сложных математических вычислений Keras не выполняет и используется как надстройка над другими библиотеками.
Keras применяется разработчиками, которые создают, настраивают и тестируют системы машинного обучения и искусственного интеллекта, в первую очередь нейронные сети.
Основные возможности Keras:
- удобное построение моделей;
- настройка слоев в моделях;
- обработка ввода и вывода информации из модели;
- преобразование входных данных;
- удобный подбор датасетов для обучения;
- визуализация модели;
- подготовка модели к работе, определение ее функций ошибки и оптимизаторов;
- обучение и тестирование модели;
- сборка и первичный запуск программы машинного обучения.