PyTorch. Освещая глубокое обучение

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Многие средства глубокого обучения используют Python, но именно библиотека PyTorch по- настоящему «питоническая». Легкая в освоении для тех, кто знаком с NumPy и scikit-learn, PyTorch упрощает работу с глубоким обучением, обладая в то же время богатым набором функций. PyTorch прекрасно подходит для быстрого создания моделей и без проблем масштабируется до корпора- тивного проекта. PyTorch используют такие компании, как Apple и JPMorgan Chase. Навыки работы с этой библиотекой пригодятся вам для карьерного роста. Вы научитесь созда- вать нейронные сети и системы глубокого обучения с помощью PyTorch. Книга поможет быстро приступить к созданию реального проекта с нуля. В ней описаны лучшие практики всего конвейера работы с данными, включая PyTorch Tensor API, загрузку данных на Python, мониторинг обучения и визуализацию полученных результатов.

Author(s): Эли Стивенс, Лука Антига, Томас Виман
Series: Библиотека программиста
Edition: 1
Publisher: Питер
Year: 2022

Language: Russian
Commentary: Publisher's PDF
Pages: 576
City: СПб.
Tags: Machine Learning; Neural Networks; Deep Learning; Image Processing; Python; Convolutional Neural Networks; Generative Adversarial Networks; Web Applications; Image Recognition; Deployment; Gradient Descent; Flask; NumPy; PyTorch; HDF5; Overfitting; Time Series Analysis; Activation Functions; AlexNet; ResNet; Cancer; Tensor Calculus; Pretrained Networks; CycleGAN; Torch Hub

Предисловие
Введение
Благодарности
Об этой книге
Для кого предназначена эта книга
Структура издания
О коде
Прочие источники информации в интернете
От издательства
Об авторах
Об иллюстрации на обложке
Часть I. Основы PyTorch
Глава 1. Знакомство с глубоким обучением и библиотекой PyTorch
1.1. Революция глубокого обучения
1.2. Использование PyTorch для глубокого обучения
1.3. Почему PyTorch?
1.3.1. Общая картина сферы глубокого обучения
1.4. Обзор средств поддержки библиотекой PyTorch проектов глубокого обучения
1.5. Аппаратные и программные требования
1.5.1. Блокноты Jupyter
1.6. Упражнения
1.7. Резюме
Глава 2. Предобученные сети
2.1. Предобученные сети для распознавания тематики изображения
2.1.1. Получение предобученной сети для распознавания изображений
2.1.2. AlexNet
2.1.3. ResNet
2.1.4. На старт, внимание, почти что марш
2.1.5. Марш!
2.2. Предобученная модель, создающая все лучшие подделки
2.2.1. Игра GAN
2.2.2. CycleGAN
2.2.3. Сеть, превращающая лошадей в зебр
2.3. Предобученная сеть для описания обстановки
2.3.1. NeuralTalk2
2.4. Torch Hub
2.5. Итоги главы
2.6. Упражнения
2.7. Резюме
Глава 3. В начале был тензор...
3.1. Мир как числа с плавающей запятой
3.2. Тензоры: многомерные массивы
3.2.1. От списков Python к тензорам PyTorch
3.2.2. Создаем наши первые тензоры
3.2.3. Что такое тензоры
3.3. Доступ к тензорам по индексам
3.4. Поименованные тензоры
3.5. Типы элементов тензоров
3.5.1. Задание числового типа с помощью dtype
3.5.2. dtype на все случаи жизни
3.5.3. Работа с атрибутом dtype тензоров
3.6. API тензоров
3.7. Тензоры: хранение в памяти
3.7.1. Доступ к хранилищу по индексу
3.7.2. Модификация хранимых значений: операции с заменой на месте
3.8. Метаданные тензоров: размер, сдвиг и шаг
3.8.1. Представления хранилища другого тензора
3.8.2. Транспонирование без копирования
3.8.3. Транспонирование при более высокой размерности
3.8.4. Непрерывные тензоры
3.9. Перенос тензоров на GPU
3.9.1. Работа с атрибутом device тензоров
3.10. Совместимость с NumPy
3.11. Обобщенные тензоры — тоже тензоры
3.12. Сериализация тензоров
3.12.1. Сериализация в HDF5 с помощью h5py
3.13. Итоги главы
3.14. Упражнения
3.15. Резюме
Глава 4. Представление реальных данных с помощью тензоров
4.1. Работа с изображениями
4.1.1. Добавление цветовых каналов
4.1.2. Загрузка файла изображения
4.1.3. Изменение схемы расположения
4.1.4. Нормализация данных
4.2. Трехмерные изображения: объемные пространственные данные
4.2.1. Загрузка данных в специализированном формате
4.3. Представление табличных данных
4.3.1. Реальный набор данных
4.3.2. Загрузка тензора данных по вину
4.3.3. Представление оценок
4.3.4. Быстрое кодирование
4.3.5. Когда считать данные категориальными
4.3.6. Поиск пороговых значений
4.4. Временные ряды
4.4.1. Добавляем измерение времени
4.4.2. Компоновка данных по периоду времени
4.4.3. Готов для обучения
4.5. Представление текста
4.5.1. Преобразование текста в числа
4.5.2. One-hot кодирование символов
4.5.3. Унитарное кодирование целых слов
4.5.4. Вложения текста
4.5.5. Вложения текста как схема
4.6. Итоги главы
4.7. Упражнения
4.8. Резюме
Глава 5. «Внутренняя кухня» обучения
5.1. Всегда актуальный урок моделирования
5.2. Обучение — это просто оценка параметров
5.2.1. «Жаркая» задача
5.2.2. Сбор данных
5.2.3. Визуализация данных
5.2.4 Выбираем линейную модель для первой попытки
5.3. Наша цель — минимизация потерь
5.3.1. Возвращаемся от задачи к PyTorch
5.4. Вниз по градиенту
5.4.1. Снижение потерь
5.4.2. Выражаем аналитически
5.4.3 Подгонка модели в цикле
5.4.4. Нормализация входных сигналов
5.4.5. Визуализируем (снова)
5.5. Компонент autograd PyTorch: обратное распространение всего, что угодно
5.5.1. Автоматическое вычисление градиента
5.5.2. Оптимизаторы на выбор
5.5.3. Обучение, проверка и переобучение
5.5.4. Нюансы автоматического вычисления градиентов и его отключение
5.6. Итоги главы
5.7. Упражнение
5.8. Резюме
Глава 6. Аппроксимация данных с помощью нейронной сети
6.1. Искусственные нейроны
6.1.1. Формирование многослойной сети
6.1.2. Функция ошибки
6.1.3. Все, что нам нужно — это функция активации
6.1.4. Другие функции активации
6.1.5. Выбор наилучшей функции активации
6.1.6. Что обучение дает нейронной сети
6.2. Модуль nn PyTorch
6.2.1. Использование метода __call__ вместо метода forward
6.2.2. Обратно к линейной модели
6.3. Наконец-то нейронная сеть
6.3.1. Замена линейной модели
6.3.2. Просматриваем информацию о параметрах
6.3.3. Сравнение с линейной моделью
6.4. Итоги главы
6.5. Упражнения
6.6. Резюме
Глава 7. Различаем птиц и самолеты: обучение на изображениях
7.1. Набор крошечных изображений
7.1.1. Скачиваем CIFAR-10
7.1.2. Класс Dataset
7.1.3. Преобразования объектов Dataset
7.1.4. Нормализация данных
7.2. Различаем птиц и самолеты
7.2.1. Формирование набора данных
7.2.2. Полносвязная модель
7.2.3. Выходной сигнал классификатора
7.2.4. Представление выходного сигнала в качестве вероятностей
7.2.5. Функция потерь для классификации
7.2.6. Обучение классификатора
7.2.7. Ограничения, накладываемые полносвязностью
7.3. Итоги главы
7.4. Упражнения
7.5. Резюме
Глава 8. Обобщение с помощью сверток
8.1. Аргументы в пользу сверток
8.1.1. Что делают свертки
8.2. Свертки в действии
8.2.1. Дополнение нулями по краям
8.2.2. Обнаружение признаков с помощью сверток
8.2.3. Расширяем кругозор с помощью субдискретизации и повышения глубины сети
8.2.4. Собираем нашу нейронную сеть воедино
8.3. Создание подклассов nn.Module
8.3.1. Наша сеть как подкласс nn.Module
8.3.2. Как PyTorch отслеживает параметры и подмодули
8.3.3. Функциональные API
8.4. Обучаем нашу сверточную сеть
8.4.1. Измерение степени безошибочности
8.4.2. Сохранение и загрузка модели
8.4.3. Обучение на GPU
8.5. Архитектура модели
8.5.1. Расширение объема памяти: ширина
8.5.2. Улучшаем сходимость модели и ее способности к обобщению: регуляризация
8.5.3. Забираемся глубже для усвоения более сложных структур: глубина сети
8.5.4. Сравнение архитектур этого раздела
8.5.5. Описанное здесь уже устарело
8.6. Итоги главы
8.7. Упражнения
8.8. Резюме
Часть II. Обучение на изображениях на практике: раннее обнаружение рака легких
Глава 9. Применение PyTorch в борьбе с раком
9.1. Постановка задачи
9.2. Подготовка к масштабному проекту
9.3. Что такое компьютерная томография
9.4. Проект: сквозной детектор рака легких
9.4.1. Почему нельзя просто передавать данные в нейронную сеть, пока она не заработает
9.4.2. Что такое узелок
9.4.3. Наш источник данных: The LUNA Grand Challenge
9.4.4. Загрузка данных LUNA
9.5. Итоги главы
9.6. Резюме
Глава 10. Объединение источников данных
10.1. Файлы необработанных данных КТ
10.2. Парсинг данных аннотаций LUNA
10.2.1. Обучающие и проверочные наборы
10.2.2. Объединение аннотаций и данных кандидатов
10.3. Загрузка сканов КТ
10.3.1. Единицы Хаунсфилда
10.4. Определение положения узелка в системе координат пациента
10.4.1. Система координат пациента
10.4.2. Форма КТ-скана и размеры вокселя
10.4.3. Преобразование миллиметров в адреса вокселей
10.4.4. Извлечение узелка из скана КТ
10.5. Простая реализация dataset
10.5.1. Кэширование массивов-кандидатов с помощью функции getCtRawCandidate
10.5.2. Построение набора данных в LunaDataset.__init__
10.5.3. Разделение данных на обучающие и проверочные
10.5.4. Отображение данных
10.6. Итоги главы
10.7. Упражнения
10.8. Резюме
Глава 11. Обучение модели классификации обнаружению потенциальных опухолей
11.1. Базовая модель и цикл обучения
11.2. Точка входа приложения
11.3. Предварительная настройка и инициализация
11.3.1. Инициализация модели и оптимизатора
11.3.2. Передача данных загрузчикам
11.4. Первый сквозной дизайн нейронной сети
11.4.1. Основы свертки
11.4.2. Полная модель
11.5. Обучение и проверка модели
11.5.1. Функция calculateBatchLoss
11.5.2. Цикл проверки работает аналогично
11.6. Вывод метрик производительности
11.6.1. Функция logMetrics
11.7. Запуск обучения
11.7.1. Необходимые для обучения данные
11.7.2. Интерлюдия: функция enumerateWithEstimate
11.8. Оценка модели: 99,7 % правильных ответов — это отличный результат, не так ли?
11.9. Построение графиков для метрик обучения с помощью TensorBoard
11.9.1. Запуск TensorBoard
11.9.2. Внедрение TensorBoard в функцию регистрации метрик
11.10. Почему модель не учится обнаруживать узелки?
11.11. Итоги главы
11.12. Упражнения
Резюме
Глава 12. Улучшение процесса обучения с помощью метрик и дополнений
12.1. План модернизации
12.2. Хорошие собаки против плохих парней: ложноположительные и ложноотрицательные результаты
12.3. Визуализация положительных и отрицательных результатов
12.3.1. Высокий отклик Рокси
12.3.2. Высокая точность Престона
12.3.3. Реализация точности и отклика в logMetrics
12.3.4. Готовая метрика производительности: метрика F1
12.3.5. Как модель работает с новыми метриками
12.4. Как выглядит идеальный набор данных
12.4.1. Как сделать данные более «идеальными»
12.4.2. Сравнение результатов обучения по сбалансированному и несбалансированному набору
12.4.3. Распознавание симптомов переобучения
12.5. Вернемся к проблеме переобучения
12.5.1. Модель прогнозирования с переобучением по возрасту
12.6. Предотвращение переобучения путем увеличения набора данных
12.6.1. Методы дополнения данных
12.6.2. Наблюдение за улучшением данных после дополнения
12.7. Итоги главы
12.8. Упражнения
Резюме
Глава 13. Поиск потенциальных узелков с помощью сегментации
13.1. Добавим в проект вторую модель
13.2. Различные типы сегментации
13.3. Семантическая сегментация: попиксельная классификация
13.3.1. Архитектура U-Net
13.4. Обновление модели сегментации
13.4.1. Адаптация готовой модели к нашему проекту
13.5. Модификация набора данных для сегментации
13.5.1. Особые требования U-Net к размеру входных данных
13.5.2. Компромиссы U-Net при работе с 3D- и 2D-данными
13.5.3. Формирование достоверных данных
13.5.4. Реализация Luna2dSegmentationDataset
13.5.5. Разработка наших данных для обучения и проверки
13.5.6. Реализация набора данных TrainingLuna2dSegmentation
13.5.7. Дополнение данных на ГП
13.6. Внедрение сегментации в сценарий обучения
13.6.1. Инициализация наших моделей сегментации и увеличения
13.6.2. Использование оптимизатора Adam
13.6.3. Потеря Дайса
13.6.4. Получение изображений в TensorBoard
13.6.5. Обновление логирования метрик
13.6.6. Сохранение модели
13.7. Результаты
13.8. Итоги главы
13.9. Упражнения
13.10. Резюме
Глава 14. Сквозной анализ узелков и дальнейшее развитие проекта
14.1. Финишная прямая
14.2. Независимость проверочного набора
14.3. Объединение сегментации КТ и классификации узелков-кандидатов
14.3.1. Сегментация
14.3.2. Группировка вокселей в узелки-кандидаты
14.3.3. Узелок или не узелок? Классификация и снижения числа ложноположительных результатов
14.4. Количественная оценка
14.5. Прогнозирование злокачественности
14.5.2. Базовый уровень для вычисления площади под кривой: классификация по диаметру
14.5.3. Повторное использование весов: тонкая настройка
14.5.4. Больше данных в TensorBoard
14.6. Каков диагноз?
14.6.1. Наборы для обучения, проверки и тестирования
14.7. Что дальше? Дополнительные источники вдохновения (и данных)
14.7.1. Борьба с переобучением: выбор лучшей регуляризация
14.7.2. Подготовка обучающих данных
14.7.3. Итоги конкурса и научные работы
14.8. Итоги главы
14.8.1. За кулисами
14.9. Упражнения
14.10. Резюме
Часть III. Развертывание
Глава 15. Развертывание в производстве
15.1. Поставка моделей PyTorch
15.1.1. Размещение модели на сервере Flask
15.1.2. Требования к развертывание
15.1.3. Пакетная обработка запросов
15.2. Экспорт модели
15.2.1. Совместимость за пределамиPyTorch с ONNX
15.2.2. Встроенный механизм экспорта PyTorch: отслеживание
15.2.3. Сервер с отслеженной моделью
15.3. Взаимодействие с PyTorch JIT
15.3.1. Что за пределами Python/PyTorch
15.3.2. Двойственная природа PyTorch как интерфейса и бекэнда
15.3.3. TorchScript
15.3.4. Использование сценариев как лучшей замены отслеживанию
15.4. LibTorch: PyTorch в C++
15.4.1. Запуск JIT-моделей из C++
15.4.2. Сразу работаем с С++ и API С++
15.5. Добавим мобильности
15.5.1. Повышение эффективности: проектирование моделей и квантование
15.6. Новые технологии: корпоративная поставка моделей PyTorch
15.7. Итоги главы
15.8. Упражнение
15.9. Резюме