Программируем с PyTorch: Создание приложений глубокого обучения - Ян Пойнтер - E-Book

Программируем с PyTorch: Создание приложений глубокого обучения E-Book

Ян Пойнтер

0,0

Beschreibung

PyTorch – это фреймворк от Facebook с открытым исходным кодом. Узнайте, как использовать его для создания собственных нейронных сетей. Ян Пойнтер поможет разобраться, как настроить PyTorch в облачной среде, как создавать нейронные архитектуры, облегчающие работу с изображениями, звуком и текстом. Книга охватывает важнейшие концепции применения переноса обучения, модели отладки и использования библиотеки PyTorch. Вы научитесь: - Внедрять модели глубокого обучения в работу - Использовать PyTorch в масштабных проектах - Применять перенос обучения - Использовать PyTorch torchaudio и сверточные модели для классификации аудиоданных - Применять самые современные методы NLP, используя модель, обученную на «Википедии» - Выполнять отладку моделей PyTorch с TensorBoard и флеймграф - Развертывать приложения PyTorch в контейнерах

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 248

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Ян Пойнтер
Программируем с PyTorch: Создание приложений глубокого обучения
2021

Переводчики Д. Акуратер, А. Попова

Технический редактор А. Руденко

Литературный редактор М. Муханова

Художники В. Мостипан, Л. Соловьева, Л. Соловьева

Корректоры С. Беляева, Н. Викторова

Верстка Л. Соловьева

Ян Пойнтер

Программируем с PyTorch: Создание приложений глубокого обучения. — СПб.: Питер, 2021.

ISBN 978-5-4461-1677-5

© ООО Издательство "Питер", 2021

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

Оглавление

Предисловие
Глубокое обучение в современном мире
Что такое глубокое обучение и нужна ли докторская степень, чтобы понять его?
PyTorch
А как насчет TensorFlow?
Типографские соглашения
Использование примеров кода
Благодарности
От издательства
Глава 1. Начало работы с PyTorch
Сборка компьютера для глубокого обучения
Глубокое обучение в облаке
Использование Jupyter Notebook
Установка PyTorch с нуля
Тензоры
Заключение
Дополнительная информация
Глава 2. Классификация изображений с помощью PyTorch
Проблема классификации
Стандартные трудности
И наконец, нейронная сеть!
Обучение
Складываем все вместе
Заключение
Дополнительные источники
Глава 3. Сверточные нейронные сети
Первая сверточная модель
История архитектур CNN
Использование предварительно обученных моделей в PyTorch
Необходимые покупки: PyTorch Hub
Заключение
Дополнительные источники
Глава 4. Перенос обучения и другие фокусы
Перенос обучения с помощью ResNet
Вычисление скорости обучения
Дифференциальная скорость обучения
Аугментация данных
Ансамбли
Заключение
Дополнительные источники
Глава 5. Классификация текста
Рекуррентные нейронные сети
Сети с долгой краткосрочной памятью
Вложения (Embeddings)
torchtext
Аугментация данных
Заключение
Дополнительные источники
Глава 6. Путешествие в мир звуков
Звук
Набор данных ESC-50
Исследуя данные ESC-50
Модель CNN для набора данных ESC-50
Частота — моя вселенная
Аугментация аудиоданных
Новые эксперименты
Заключение
Дополнительные источники
Глава 7. Отладка моделей PyTorch
Три часа ночи. Что делают ваши данные?
TensorBoard
Флеймграфы
Решение задачи медленного преобразования
Отладка проблем с графическим процессором
Заключение
Дополнительные источники
Глава 8. PyTorch в рабочей среде
Обслуживание модели
Развертывание в Kubernetes
TorchScript
Работа с libTorch
Заключение
Дополнительные источники
Глава 9. PyTorch на практике
Аугментация данных: смешанная и сглаженная
Компьютер, улучшай!
ESRGAN
Новые приключения в распознавании образов
Состязательные семплы
Заключение
Дополнительные источники
Об авторе
Об обложке

Предисловие

Глубокое обучение в современном мире

Всем привет! В этой книге я расскажу вам о глубоком обучении в PyTorch — библиотеке с открытым исходным кодом, выпущенной Facebook в 2017 году. Если только вы не живете на необитаемом острове, то наверняка заметили, что нейронные сети сейчас можно встретить повсюду. Они перестали быть некоей суперчастью computer science, которую мы изучаем и никак не используем: нейросети есть, например, в наших смартфонах. С их помощью мы улучшаем фотографии или даем голосовые команды. Программное обеспечение для электронной почты читает письма и выдает соответствующий контексту ответ, нас слушаются умные колонки, автомобили ездят сами по себе, а компьютер наконец-то переиграл человека в Го. А, например, в авторитарных странах эта технология используется для не самых хороших дел: системы, в основе которых лежат нейронные сети, распознают лица и принимают решения о задержании этих людей.

И все же, несмотря на ощущение, что все произошло так быстро, концепции глубокого обучения и нейронных сетей уходят в далекое прошлое. Доказательство того, что такая сеть может стать заменой любой математической функции аппроксимации (нейронные сети могут быть обучены для множества различных задач), датируется 1989 годом1, а в конце 90-х ­сверточные нейронные сети использовались для распознавания контрольных цифр. Все это время строился прочный фундамент, но почему же именно за последние десять лет произошел бум?

Существует много причин, но основная из них заключается в росте ­производительности графических процессоров (GPU) и их ценовой ­доступности.

Изначально разработанные для игр, GPU должны выполнять миллионы операций над матрицами в секунду, чтобы визуализировать все полигоны гоночной игры или стрелялки, в которую вы играете на консоли или на ПК, — операции, под которые стандартный центральный процессор (CPU) просто не заточен.

В работе «Large-Scale Deep Unsupervised Learning Using Graphics Processors», которую Раджат Райна написал совместно с другими авторами, отмечается, что обучение нейронных сетей также основано на вы­полнении множества операций над матрицами, и поэтому дополни­тельные видеокарты могут использоваться для ускорения обучения, а ­также для создания более крупных и глубоких архитектур нейронных сетей.

Другие важные методы, такие как прореживание, или дропаут (который мы рассмотрим в главе 3), также были введены в последнее десятилетие как способ не только ускорить обучение, но и сделать его более обобщенным (чтобы сеть не просто научилась распознавать набор данных для обу­чения, как это происходит при возникновении проблемы переобучения, о которой мы поговорим в главе 1). За последние пару лет компании вывели этот подход, в основе которого лежат GPU, на новый уровень, и Google создал так называемые тензорные процессоры (TPU), которые представляют собой устройства, разработанные специально для максимально быстрого глубокого обучения. Они доступны как часть экосистемы Google Cloud.

Еще один способ оценить прогресс в области глубокого обучения за последнее десятилетие — это конкурс ImageNet. Обширная база данных, насчитывающая более 14 миллионов изображений, вручную разделенных на 20 тысяч категорий, ImageNet — сокровищница размеченных данных для целей машинного обучения.

С 2010 года ведется проект ImageNet Large Scale Visual Recognition Challenge — кампания по широкомасштабному распознаванию образов в ImageNet, в рамках которой различные программные продукты ежегодно соревнуются в классификации и распознавании объектов и сцен в базе данных из тысячи категорий ImageNet, и до 2012 года процент ошибок составлял около 25 %.

Однако в тот год победила глубокая сверточная нейронная сеть, значительно превзошедшая всех остальных участников: ее процент ошибок ­составлял 16 %. В последующие годы уровень ошибок все больше и больше снижался, и в 2015 году архитектура ResNet получила результат 3,6 %, что превосходит средний результат человека в ImageNet (5 %). Нас ­обошли.

Что такое глубокое обучение и нужна ли докторская степень, чтобы понять его?

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

Математика — вот что пугает многих, если речь идет о глубоком обучении. Посмотрите любую работу в этой области, и вы увидите огромное количество греческих букв. Скорее всего, вы пуститесь наутек без оглядки. Но на самом деле не нужно быть гением, чтобы использовать методы глубокого обучения. Для большинства повседневных базовых применений технологии не нужно много знать, а чтобы по-настоящему понять ее (как вы увидите в главе 2), нужно всего лишь немного подготовиться. Это поможет понять концепции, которые вы наверняка учили в старших классах. Так что не пугайтесь математики.

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

PyTorch

Как я уже говорил, PyTorch — это предложение от Facebook с открытым исходным кодом, которое облегчает написание кода для глубокого изучения на Python. У него два «родителя». Во-первых, что вовсе не удивительно, учитывая его название, много функций и концепций он позаимствовал из Torch — библиотеки нейронных сетей на основе Lua, появившейся в 2002 году. Другой «родитель» — Chainer, разработанный в Японии в 2015 году. Chainer была одной из первых библиотек, предложивших энергичный подход к дифференциации вместо определения статических графов, позволяющий более гибко подходить к созданию, обучению и эксплуатации сетей. Наследие Torch и идеи Chainer сделали PyTorch популярным за последние пару лет.2

Библиотека также содержит модули, которые помогают работать с текстом, изображениями и звуком (torchtext, torchvision и torchaudio), а также встроенные варианты распространенных архитектур, таких как ResNet (с весами, которые можно загрузить для облегчения работы с переносом обучения, о котором вы узнаете в главе 4).

Так же как и Facebook, PyTorch быстро завоевал признание, и такие компании, как Twitter, Salesforce, Uber и NVIDIA, используют его различными способами для глубокого обучения. Я знаю, что вы хотите спросить…

А как насчет TensorFlow?

Да, давайте посмотрим на весьма заметного слона от Google. Что такого предлагает PyTorch, чего нет у TensorFlow? Почему вы должны изучать именно PyTorch?

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

Поэтому PyTorch стал популярным в исследовательских сообществах. ­Количество работ, представленных на Международную конференцию по обучению, в которых упоминается PyTorch, за прошедший год подскочило на 200 %, а количество работ, упоминающих TensorFlow, увеличилось почти в равной степени. PyTorch пришел определенно для того, чтобы остаться.

Однако в более поздних версиях TensorFlow все меняется. Недавно в библиотеку была добавлена новая функция, называемая энергичным выполнением (eager execution), которая позволяет ей работать по аналогии с PyTorch и будет представлять парадигму, поддерживаемую в TensorFlow 2.0. А так как новых ресурсов, кроме Google, помогающих изучить этот новый метод работы с TensorFlow, не так уж и много, потребуются годы работы, чтобы понять другую парадигму и получить максимальную отдачу от библиотеки. Но это не повод плохо относиться к TensorFlow; она остается проверенной библиотекой, которую поддерживает одна из крупнейших компаний на планете. Я бы сказал, что в PyTorch (поддерживаемый другой крупнейшей компанией) вложен более оптимизированный и целенаправленный подход к глубокому обучению и дифференциальному программированию. Поскольку ему не нужно продолжать поддерживать более старые и сложные API-интерфейсы, учиться и работать в PyTorch легче, чем в TensorFlow.

А как сюда вписывается Keras? Тоже хороший вопрос! Keras — это библиотека глубокого обучения высокого уровня, которая изначально поддерживала Theano и TensorFlow, а теперь также поддерживает некоторые другие платформы, например Apache MXNet. Она предоставляет определенные функции, такие как циклы обучения, проверки и тестирования, которые низкоуровневые фреймворки оставляют разработчикам, а также простые методы построения архитектур нейронных сетей. Библиотека Keras внесла огромный вклад в освоение TensorFlow и теперь является ее непосредственной частью (как tf.keras), а также продолжает оставаться отдельным проектом. PyTorch — это нечто среднее между низкоуровневыми сырыми TensorFlow и Keras; приходится писать свои собственные процедуры обучения и выводы, но создавать нейронные сети почти так же просто (и я бы сказал, что разработчики Python считают подход PyTorch к созданию и повторному использованию архитектур гораздо более логичным, чем некоторые из чудес Keras).

Хотя PyTorch распространен в исследовательских целях, во время чтения вы увидите, что PyTorch 1.0 идеально подходит для производственных сценариев использования.

Типографские соглашения

В данной книге используются следующие типографские соглашения:

Курсив

Обозначает новые термины.

Шрифт без засечек

Обозначает URL, адреса электронной почты, названия файлов и расширения.

Моноширинный шрифт

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

Этот элемент означает подсказку или предложение.

Этот элемент означает общее примечание.

Этот элемент указывает на предупреждение или предостережение.

Использование примеров кода

Дополнительные материалы (примеры кода, упражнения и т.д.) доступны для скачивания по адресу https://oreil.ly/pytorch-github.

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

Если вам кажется, что использование вами примеров кода выходит за рамки правомерного применения или данных выше разрешений, не стесняясь связывайтесь с нами по адресу [email protected].

Благодарности

Выражаю огромную благодарность моему редактору Мелиссе Поттер (Melissa Potter), моей семье и Тэмми Эдлунд (Tammy Edlund) за их помощь в создании книги. Спасибо научным редакторам, которые предоставляли ценную обратную связь на протяжении всего процесса написания этой книги, включая Фила Роудса (Phil Rhodes), Дэвида Мерца (David Mertz), Чарльза Гивра (Charles Givre), Доминика Монна (Dominic Monn), Анкура Пателя (Ankur Patel) и Сару Наги (Sarah Nagy).

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информа­цию о наших книгах.

1См. «Approximation by Superpositions of Sigmoidal Functions», George Cybenko (1989), https://www.semanticscholar.org/paper/Approximation-by-superpositions-of-a-sigmoidal-Cybenko/8da1dda34ecc96263102181448c94ec7d645d085

2Обратите внимание, что PyTorch заимствует только идеи Chainer, а не реальный код.