PyTorch для начинающих: основы

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


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

Мы обучаем наши машины учиться, и результаты становятся все лучше и лучше. Есть GAN, которые могут генерировать новые изображения, модели глубокого обучения для перевода языка жестов в текст, а что нет! В этой быстро развивающийся области PyTorch возник как новый выбор для построения моделей.

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

PyTorch Что это?

PyTorch - это библиотека на основе Python, которая облегчает создание моделей глубокого обучения и их использование в различных приложениях. Но это больше, чем просто еще одна библиотека глубокого обучения, это научный вычислительный пакет (как утверждает докуменатция PyTorch).

Это научный вычислительный пакет на основе Python, у которого две цели:
1. Замена NumPy для использования мощности графических процессоров
2. Исследовательская платформа глубокого обучения, обеспечивающая максимальную гибкость и скорость
Deep Learning с PyTorch: 60-минутный блиц

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

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

Зачем мне изучать PyTorch?

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

Нет недостатка в библиотеках глубокого обучения: Keras, Tensorflow, Caffe, Theano (RIP) и многие другие. Но что отличает PyTorch?

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

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

Конечно, из-за Python он сталкивается с риском медленного выполнения, но высокопроизводительный C++ API (libtorch) удаляет эти накладные расходы. Это делает переход от R&D к продукции очень ровным. Еще одна причина использовать PyTorch?

Обзор библиотеки PyTorch

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

Основные модули PyTorch, которые мы кратко обсудим позже: torch.nn, torch.optim, torch.utils and torch.autograd.

1. Загрузка и обработка данных

Самый первый шаг в любом проекте глубокого обучения связан с загрузкой и обработкой данных. В PyTorch для этого есть отдельный метод torch.utils.data

Два важных класса в этом модуле-Dataset и DataLoader.

Dataset построен поверх тензорного типа данных и используется в основном для пользовательских наборов данных.

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

Мы также можем использовать torch.nn.DataParallel и torch.distributed, если у нас есть доступ к нескольким компьютерам или GPU.

2. Построение Нейронной Сети

Модуль torch.nn используется для создания нейронных сетей. Она обеспечивает все общие слои нейронной сети как полностью Соединенные слои, сверточные слои, активация и функции потерь.

Как только архитектура сети создана и данные готовы к подаче в сеть, нам нужны методы обновления весов и смещений, чтобы сеть начала учиться. Эти утилиты предоставляются в torch.optim . Точно так же для автоматического дифференцирования, которое требуется во время обратного прохода, мы используем torch.autograd.

3. Вывод Модели и Совместимость

После обучения модель можно использовать для прогнозирования выходных данных тестовых наборов или даже новых наборов данных. Этот процесс называется выводом модели.

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

Вы также можете конвертировать модели, обученные с помощью PyTorch в форматы, такие как ONNX, которые позволяют использовать эти модели в других DL-фреймворках, таких как MXNet, CNTK, Caffe2. Вы также можете конвертировать модели onnx в Tensorflow.

Введение в тензоры

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

Тензор-это просто причудливое название для матриц. Если вы знакомы с массивами NumPy, понимание и использование тензоров PyTorch будет очень легко. Скалярное значение представлено 0-мерным тензором. Аналогично матрица столбцов / строк с использованием 1-D тензора и так далее. Некоторые примеры тензоров с различными размерами показаны ниже.

Прежде чем мы начнем с введения в тензоры, давайте установим PyTorch 1.1.0

conda install -c pytorch pytorch-cpu

Вот так! Теперь давайте начнем. Мы предлагаем вам использовать Google Colab и следовать за ним. В меню выберите тип среды выполнения GPU.

Создайте свой первый Тензор

Как мы можем создать PyTorch Tensor. Первым делом импортируем PyTorch

Мы можем аналогично создать Тензор с пользовательскими значениями, как показано ниже.

Во всех вышеперечисленных случаях мы создали векторы или тензоры размерности 1. Теперь давайте создадим несколько тензоров большей размерностью.

Мы также можем узнать форму тензора с помощью матода .shape.

Доступ к элементу в Тензоре

Теперь, когда мы создали несколько тензоров, давайте посмотрим, как мы можем получить доступ к элементу в Тензор. Сначала давайте посмотрим, как это сделать для 1D тензора, он же вектор.

Как насчет 2D или 3D тензора? Вспомните, что мы говорили о размерности тензора в прошлом разделе. Чтобы получить доступ к одному конкретному элементу в Тензоре, нам нужно будет указать индексы, равные размерности тензора. Вот почему для тензора c нам нужно было указать только один индекс.

Но что, если вы хотите получить доступ к одной целой строке в 2D Тензоре? Мы можем использовать тот же синтаксис, что и в массивах NumPy.

Укажите тип данных элементов

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

Тензор и массив NumPy

Мы уже несколько раз упоминали, что тензоры PyTorch и массивы NumPy довольно похожи. Это, конечно, требует вопроса, Можно ли преобразовать одну структуру данных в другую. Посмотрим, как мы сможем это сделать.

Арифметические операции над тензорами

Теперь пришло время для следующего шага. Давайте посмотрим, как мы можем выполнять арифметические операции над тензорами PyTorch.

Тензор CPU против GPU

PyTorch имеет различную реализацию тензора для CPU и GPU. Каждый тензор может быть преобразован в GPU для выполнения массивно параллельных, быстрых вычислений. Все операции, которые будут выполняться на тензор будут проводиться с использованием GPU-специальных программ, которые поставляются с PyTorch.

Если у вас нет доступа к GPU, вы можете выполнить эти примеры в Google Colab. Выберите GPU в качестве среды выполнения.

Давайте сначала посмотрим, как создать тензор для GPU.

# Create a tensor for CPU

# This will occupy CPU RAM

tensor_cpu = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], device='cpu')

# Create a tensor for GPU

# This will occupy GPU RAM

tensor_gpu = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], device='cuda')

Если вы используете Google Colab, сосредоточьтесь на счетчике потребления ОЗУ в правом верхнем углу, и вы увидите, что потребление ОЗУ GPU увеличивается, как только вы создадите tensor_gpu.

Как и создание тензора, операции, выполняемые для тензоров CPU и GPU, также различны и потребляют ОЗУ, соответствующее указанному устройству.

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

Мы можем переместить тензор GPU в CPU и наоборот, как показано ниже.

Фух! Это все чуваки. Напомним, что в этом блоге мы обсуждали PyTorch, его уникальность и почему вы должны его изучить. Мы также обсудили процесс PyTorch и тензорного типа данных PyTorch на некоторой глубине.

В следующем блоге мы увидим, как можно использовать предварительно обученные модели с помощью TorchVision.

Еще больше кода здесь

Почитать на досуге:

  1. Deep Learning with PyTorch by Eli Stevens, Luca Antiga – Manning Publication
  2. PyTorch tutorial

Оригинал Автор: Vishwesh Shrimali


Источник: m.vk.com

Комментарии: