Фреймворки машинного обучения и глубокого обучения

Почему я перехожу с Keras на PyTorch

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

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

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

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

Керас

Компания Keras основана Франсуа Шоле, французским инженером и исследователем в области искусственного интеллекта. Керас растут, и его развитие становится одним источником с тензорным потоком. Керас

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

Keras является официальным высокоуровневым API для tenorflow 2.0, когда Google анонсировал в 2019 году, в прошлом keras поддерживали несколько фреймворков, таких как theano, CNTK и т. Д. Поэтому для установки и использования keras вам просто нужно установить новейший тензорный поток 2.0 с помощью этого скрипта:

pip install tensorflow

PyTorch

PyTorch - это среда машинного обучения с открытым исходным кодом, разработанная Facebook AI Research (FAIR) на основе библиотеки Torch на языке программирования LUA. Имя разработчика, разрабатывающего pytorch, - Адам Пашке, Сэм Гросс, Сумит Чинтала и Грегори Чанан.

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

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

Теперь, с версией PyTorch 1.5+, он поддерживает производство и разработку даже в мобильной разработке (экспериментально). Так что не беспокойтесь о том, чтобы использовать его в производстве, я тоже использовал его в своей компании, в исследованиях и производстве.

Итак, чтобы установить pytorch, я советую вам использовать установщик Anaconda и conda, вы можете просто ввести текст ниже в своем терминале:

conda install pytorch torchvision cudatoolkit=10.2 -c pytorch

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

Питонический

Так что же такое питонический? Если вы точно не знаете, что такое питонический, позвольте мне объяснить это простым способом.

У каждого языка программирования есть собственный стиль кода, даже образ мыслей о том, как его правильно разрабатывать и использовать. Итак, python - это язык сценариев, и есть руководство по правильному использованию программирования на Python, которое мы называем дзеном Python.

Приведу плохой пример и хороший пример:

#this is bad example and not pythonic
lst = ["hai", "i'm", "fandi"]
for i in range(len(lst)):
   print(lst[i])
#this is good example and more pythonic
lst = ["hai", "i'm", "fandi"]
for word in lst:
   print(word)

Итак, вопрос в том, какой из них более питонический? керас или пыторч?

Если сравнивать керас и питорч, но из них питонический. Но помните, что keras - это высокоуровневый API для тензорного потока. Проблема в том, что tenorflow разработан на C ++, а python является одним из интерфейсов для доступа к его API. Так что вкус tenorflow больше похож на C ++, но на языке Python. Это просто неестественно, или я могу сказать, что не питоническое. Вы не можете использовать керасы без тензорного потока, поэтому вы всегда будете сталкиваться с непитонической стороной керасов из-за тензорного потока.

С другой стороны, для pytorch он изначально разрабатывался для программиста на python, так что это очевидный pythonic. Но если вам нужен интерфейс pytorch на C ++, он у них есть, если вы хотите использовать версию pytorch для C ++.

Итак, Победитель - PyTorch за то, что он более питоничен.

Отладка и проверка

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

Это то, что мне нравится в pytorch, я могу видеть, что произошло внутри модели. Когда я создавал UNet для сегментации сети, я хотел видеть, что видит сеть. Я хочу знать, какая сеть учится на изображении, поэтому мне нужно отладить и проверить, что с сетью не так, а что правильно. В керасе это сделать очень сложно, даже если это возможно. Но с pytorch вы делаете это очень простым и питоническим способом. Даже сейчас у вас есть captum, библиотека в верхней части pytorch, которая более сложна, чтобы видеть, что находится внутри сети.

Итак, Победитель - PyTorch в отладке и проверке.

Набор данных

Когда дело доходит до набора данных, pytorch очень гибок и богат для набора данных. В нем есть torchvision для сценария использования компьютерного зрения и torchtext для сценария использования NLP. Вы можете легко создать свой собственный класс набора данных, просто унаследовав класс по умолчанию, который был предоставлен для этого.

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

Напротив, keras не предоставляет вам большой набор данных. Только небольшая часть известного набора данных, такого как MNIST, поддерживается keras. И помните, keras использует numpy в качестве основного набора данных, и для меня это болезненно и ограничивает мои творческие возможности, чтобы создать собственное решение.

Итак, Победитель - PyTorch за готовность и гибкость набора данных.

Модель

Написание модели в pytorch имеет определенный способ, есть модели с классовой и последовательной. Мне больше всего нравится использование классов, и это удобный способ написать модель в pytorch.

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

Итак, в этом случае PyTorch и Keras - это Draw.

Обучение

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

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

Я вспомнил, что меня спрашивали, почему pytorch не пишет как keras для своего обучающего кода. Затем я обнаруживаю причину, по которой, когда я пишу код для себя, я усиливаю свою работу в моей компании, вам действительно нужна гибкость при написании собственного кода обучения и оценки. В исследовании вам нужно иметь гибкость, чтобы отлаживать и проверять свою сеть во время обучения, вы хотите знать, что произошло в процессе обучения.

Но если вы хотите иметь что-то вроде keras в pytorch, однострочный код для обучения, тогда есть какие-то библиотеки, такие как pytorch-ignite и pytorch-lightnin g. Я даже строю его для себя, и я называю это факелом мудрости, но я не могу продолжать развивать его из-за крайнего срока, который моя компания хочет соблюдать.

Итак, кто же тогда победитель? Для простоты Победитель - Керас.

Портативность

Tensorflow и Keras долгое время использовались в средах глубокого обучения, поэтому для обеспечения переносимости они были готовы к множественному развертыванию на многих платформах, таких как мобильные устройства, устройства IoT, сервер и т. Д. Напротив, pytorch новичок по сравнению с Keras и TensorFlow, поэтому разработка для многих платформ все еще ниже Keras и TensorFlow. Но, начиная с версии 1.3 pytorch готов к разработке в мобильной (экспериментальной) версии.

Итак, почему вы все еще используете pytorch, если он не поддерживает встроенное развертывание для многих платформ из-за своей переносимости?

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

В этом случае Keras является Победителем за готовность к экспорту.

Представление

Когда дело доходит до производительности с последними данными за 2018 год, TensorFlow по-прежнему остается победителем во многих случаях, но если вы сравните pytorch с keras, pytorch выигрывает всю игру. На приведенной ниже диаграмме, взятой из репозитория ilkarman github, видно, что в тесте производительности используются графические процессоры Nvidia K80 и P100 с разными моделями глубокого обучения. В некоторых случаях pytorch выигрывает, особенно когда он использует графический процессор P100.

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

Итак, по производительности Победитель - PyTorch

Популярность

Сначала я покажу вам, что тенденции Google говорят о популярности pytorch, keras и tensorflow. После этого я покажу, сколько на него цитируется в исследованиях, а затем я расскажу вам еще одну вещь, которую вам нужно знать о его популярности.

Как вы видите в тенденциях Google, pytorch выигрывает у keras и в какой-то момент даже догоняет тензорный поток.

Так как насчет цитирования в исследованиях? Из отчета, предоставленного Градиентом под названием Состояние фреймворков машинного обучения в 2019 году, PyTorch привлекает больше внимания, поскольку использование в исследованиях меньшинством становится преобладающим и преобладающим в исследованиях. Позвольте мне показать вам изображение, которое я взял из их отчета.

Более того, если вы знаете таких героев глубокого обучения, как Андрей Карпати (OpenAI, Tesla), Ян Гудфеллоу (основатель GAN) и других, они перешли на PyTorch. И не только это, Udacity Deep Learning Nanodegree меняет свой фреймворк в своем курсе с Tensorflow на PyTorch, теперь все их платформы машинного обучения и глубокого обучения используют PyTorch.

И не спрашивайте сейчас о сообществе, его огромном сообществе. От академического исследователя до отраслевого, PyTorch уже многое приобрел во многих областях исследований и промышленности.

Итак, кто победитель? Честно говоря, сейчас я бы сказал, что это Draw

Вариант использования в производстве

Теперь каждая модель машинного обучения будет использоваться в производственной среде. Так какой из них выиграет игру массового использования в производстве? И для этого Tensorflow, как долгого игрока, выигрывает игру для массового использования в продакшене, но…. PyTorch использовался во многих производственных областях, и вскоре он догонит Tensorflow и Keras. Вы знаете автопилот Tesla, использующий pytorch? Я сам использую PyTorch в производственной среде своей компании, поэтому не бойтесь переключаться, это просто вопрос времени.

Итак, для этого Tensorflow и Keras по-прежнему Победитель

Заключение

Давайте подведем итоги того, что мы видели с параметром, который мы использовали для сравнения pytorch с keras. В целом PyTorch является победителем по 9 аспектам того, о чем мы говорили.

Для меня PyTorch очень помог мне решить проблему компьютерного зрения, с которой я столкнулся. И некоторые из моих друзей, которые работали в НЛП, они действительно довольны PyTorch в индустрии. Так что это ваш шанс использовать PyTorch, нечего терять? Если вы никогда не научитесь этому, просто попробуйте, это все равно что потратить ваше время, может быть, когда-нибудь это будет полезно для вас.

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