Учебник по глубокому обучению

Введение в PyTorch для глубокого обучения

Классификация изображений с PyTorch с использованием трансферного обучения.

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

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

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

В этом посте я расскажу о PyTorch для глубокого обучения. В итоге,

  • Что такое ПиТорч?
  • Преимущества PyTorch.
  • Как установить ПиТорч?
  • Практика с реальным набором данных.

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

Прежде чем начать, не забудьте подписаться на наш канал YouTube, где мы создаем контент об искусственном интеллекте, науке о данных, машинном обучении и глубоком обучении👇



Давайте углубимся в то, что такое PyTorch.

Что такое ПиТорч

PyTorch — популярная библиотека, написанная на языке Python. Он используется специально для глубокого обучения. PyTorch изначально был разработан Facebook. Позже в 2017 году она стала бесплатной библиотекой с открытым исходным кодом.

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

Итак, почему вы должны выбрать PyTorch? Давайте посмотрим на преимущества PyTorch.



Почему ПиТорч?

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

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

Как вы знаете, Python — интерпретирующий язык. В PyTorch он работает в активном режиме, так как написан на Python. Другими словами, вы можете сразу увидеть результаты кодов, которые вы написали в PyTorch. Таким образом, вы можете легко найти свои коды отладки.

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

Для глубокого обучения требуется мощный компьютер. Если у вас нет мощного компьютера, не беспокойтесь. Вы можете бесплатно использовать PyTorch как в Google Colab, так и в ядрах Kaggle.

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

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

Как видите, PyTorch — идеальная библиотека для проектов глубокого обучения. Есть еще много причин выбрать PyTorch. Я упомянул здесь только некоторые важные преимущества. Давайте продолжим и посмотрим, как установить PyTorch.



Установка PyTorch

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

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

conda create — name pytorch

Создается новая виртуальная среда под названием PyTorch. Далее вам нужно активировать эту среду. Сделать это:

conda activate pytorch

После этого вы вставляете сюда команду, скопированную с сайта PyTorch.

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

Это так просто. Если на вашем компьютере установлена ​​видеокарта NVIDIA, не забудьте выбрать опцию GPU. С GPU вы можете выполнять анализ глубокого обучения в 50 раз быстрее.

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

Если вы хотите провести анализ глубокого обучения бесплатно, вы можете использовать Colab. Colab — это бесплатный облачный сервис, предлагаемый Google. Интерфейс Colab похож на Jupyter Notebook. Вы можете запускать свои коды Python в Colab. Вы также можете использовать Colab с графическим процессором.

PyTorch установлен в Colab, поэтому вам не нужно устанавливать его отдельно. Давайте посмотрим на установленную версию PyTorch.

import torch
print(torch.__version__)

Одним из преимуществ Colab является то, что его интерфейс похож на Jupyter Notebook. Если вы знаете, как использовать Jupyter Notebook, вы можете легко использовать Colab. По умолчанию Colab не работает с GPU. Давайте проверим это.

print(torch.cuda.is_available())

Вывод ложный. Для работы с графическим процессором выберите «Изменить тип запуска» в меню «Среда выполнения» и выберите «Графический процессор» в разделе «Аппаратное ускорение».

Теперь давайте снова запустим эту команду.

print(torch.cuda.is_available())

И правда пишется на экран. После этого мои коды запускаются на GPU. Если вы покупаете Pro-версию Colab, вы можете использовать более мощный графический процессор и больше памяти. Бесплатной версии достаточно для анализа, который я собираюсь провести в этом блоге.

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



Приложение Питорч

Теперь позвольте мне показать вам, как классифицировать изображения с помощью PyTorch. В этом упражнении я возьму картинку из интернета и укажу класс этой картинки.

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

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

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

import urllib.request

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

url = “https://github.com/pytorch/hub/raw/master/images/dog.jpg"

Присвоим имя изображения, найденного в этой ссылке, переменной file_name.

file_name = “dog.jpg”

Теперь позвольте мне получить изображение из Интернета.

urllib.request.urlretrieve(url, file_name)

Теперь у нас есть картина.

Теперь давайте прочитаем картинку с библиотекой Pillow, а потом посмотрим картинку с matplotlib. Во-первых, давайте импортируем библиотеки.

import matplotlib.pyplot as plt
from PIL import Image

Давайте назначим изображение переменной img.

img = Image.open(‘dog.jpg’)

Посмотрим на картинку с matplotlib.

plt.imshow(img)

Мы понимаем, что это изображение собаки. Но как компьютер поймет эту картинку? Я собираюсь поговорить об этом. Моя цель - найти тег для этой картинки. Для этого я собираюсь использовать алгоритм, основанный на нейронных сетях.

Прежде чем передать изображение алгоритму, вам необходимо предварительно обработать изображение. Убедитесь, что изображение доступно для алгоритма. Наша картина в цветном формате. Он имеет 3 канала, RGB и размер 1600*1200. Помните, что этапы предварительной обработки данных в Pytorch называются преобразованиями. Теперь давайте сделаем изображение пригодным для анализа с помощью преобразований.

Давайте сначала импортируем PyTorch, а затем преобразуем.

import torch
from torchvision import transforms

Давайте воспользуемся методом compose для определения серии шагов предварительной обработки.

preprocess = transforms.Compose([
    transforms.Resize(256),        #1
    transforms.CenterCrop(224),    #2
    transforms.ToTensor(),         #3
    transforms.Normalize(          #4
    mean=[0.485, 0.456, 0.406],
    std=[0.229, 0.224, 0.225])])

Давайте пройдемся по этим кодам:

  1. Я изменяю размер изображения до 256 размеров с помощью метода Resize.
  2. Я применяю центральное отсечение, чтобы подогнать нейронную сеть.
  3. Как известно, нейронные сети работают с числовыми данными. Я превращаю это изображение в тензор. Тензор — это основной объект данных в PyTorch. Вы можете думать о Tensor как о массиве NumPy с дополнительными функциями.
  4. Изображения состоят из значений пикселей. Я масштабирую эти значения пикселей между 0–1. Благодаря этому масштабированию вы можете делать более быстрые и точные прогнозы.

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

img_tensor = preprocess(img)

Как видите, img_tensor имеет размер 224*224 и состоит из 3-х каналов в виде RGB. Алгоритмы глубокого обучения работают с миллионами данных. Отдавать все эти данные модели сразу не имеет смысла. Данные передаются нейронным сетям группами, называемыми пакетами. Размер пакета для больших данных обычно составляет 32 или 64. Вы указываете эти значения в соответствии с вашим анализом.

У меня есть только одно изображение, но модели глубокого обучения ожидают, что данные будут пакетными. Теперь давайте добавим пакет к нашим данным. Я собираюсь использовать метод распаковки, чтобы добавить измерение к данным. В этом методе нам нужно указать, куда добавить измерение. Я собираюсь установить 0, чтобы добавить размер в начале.

batch = img_tensor.unsqueeze(0)

Давайте теперь посмотрим на размер данных.

print(batch.shape)

Таким образом, мои данные были 1 партия, 3 канала и 224*224 пикселей. Теперь изображение готово для входа в нейронную сеть.

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

Например, очень просто загрузить модель, используемую для классификации изображений с помощью Torchvision. Давайте воспользуемся AlexNet, выигравшей конкурс ImageNet в 2012 году, для классификации изображений. Во-первых, давайте импортируем модели из torchvision.

from torchvision import models

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

Глубокое обучение — это больше искусство, чем наука.

Теперь давайте установим alexnet. С опцией pretrained=True загружаются ранее обученные коэффициенты модели.

model = models.alexnet(pretrained=True)

Теперь давайте создадим переменную устройства, чтобы анализ выполнялся на GPU, если он есть на GPU, и на CPU, если нет.

device = “cuda” if torch.cuda.is_available() else “cpu”

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

model.eval()

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

model.to(device)

Назначим команду запуска модели переменной y.

y = model(batch.to(device))
print(y.shape)
#outout : torch.Size([1, 1000])

Посмотрим размерность y. Здесь 1 представляет пакет данных. Поскольку у нас есть только 1 изображение, номер партии равен 1. Поскольку количество классов равно 1000, на экране записывается значение 1000. Теперь давайте посмотрим, какой класс получает наибольшую ценность.

y_max, index = torch.max(y,1)

Давайте выведем эти переменные на экран.

print(index, y_max)
#output: tensor([258], device='cuda:0') tensor([16.8252], device='cuda:0', grad_fn=<MaxBackward0>)

Моя модель нашла класс с 258-м индексом с официальным наивысшим значением 16,8252. Но мы не знаем класс с индексом 258. Давайте теперь возьмем имена классов с сайта PyTorch. Позвольте мне сначала создать переменную URL.

url = ‘https://pytorch.tips/imagenet-labels'

Давайте создадим переменную метки класса.

fname = ‘imagenet_class_labels.txt’

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

urllib.request.urlretrieve(url, fname)

Давайте откроем этот список.

with open("imagenet_class_labels.txt") as f:
  classes = [line.strip() for line in f.readlines()]
print(classes[258])
# output: 258: 'Samoyed, Samoyede'

Как видите, на экране написана порода собаки. Итак, с какой процентной вероятностью модель достигла этого результата? Давайте воспользуемся функцией softmax(), чтобы увидеть это.

probe = torch.nn.functional.softmax(y, dim=1)[0] * 100

Позвольте мне показать эту возможность сейчас. Я собираюсь использовать метод tensor.item(), чтобы увидеть вероятность.

print(classes[index[0]], probe[index[0]].item())
# output: 258: 'Samoyed, Samoyede', 72.44749450683594

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

 _, indices = torch.sort(y, descending=True)

Теперь давайте напечатаем предсказания до 5.

for idx in indices[0][:5]:
    print(classes[idx], probe[idx].item())

Как видите, моя модель изначально предсказывала, что порода собак будет самоедской на 72 %, тогда как порода валлаби — на 13 %, а померанский шпиц — на 5 %.

Заключение

В этом посте я рассказал о PyTorch для глубокого обучения. Подводя итог, я сначала объяснил, что такое PyTorch и его преимущества. Далее я показал вам установку. И, наконец, я рассказал, как оценить класс изображения с помощью предварительно обученного alexnet.

Вот и все. Спасибо за чтение. Я надеюсь, вам понравится это. Вам могут быть интересны следующие статьи.





Не забудьте подписаться на нас на YouTube | Гитхаб | Твиттер| Kaggle | ЛинкедИн👍

Если этот пост был полезен, пожалуйста, нажмите кнопку аплодисментов 👏 несколько раз, чтобы показать мне свою поддержку 👇