• A
  • A
  • A
  • АБВ
  • АБВ
  • АБВ
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Пример обучения нейронной сети с использованием PyTorch

👉Вернуться к списку инструкций

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

На суперкомпьютере cHARISMa подготовлены окружения с PyTorch версии 1.8 и 1.11. Также каждый пользователь может самостоятельно создать персональное окружение с требуемой версией PyTorch.

В данном примере рассматривается задача обучения нейронной сети по классификации изображений из датасета CIFAR-10. Используемая модель нейронной сети обеспечивает точность классификации до 95%.
Запуск обучения нейронной сети можно производить через веб-интерфейс Jupyter Notebook или с использованием sbatch-файлов очереди задач. Процесс конвертации кода из Jupyter-ноутбуков для запуска в пакетном режиме подробно описан в отдельной инструкции.

Обучение в интерфейсе Jupyter Notebook

1. Запустите Jupyter Notebook на вычислительном узле суперкомпьютера с использованием сервиса JupyterHub. Для ускорения обучения необходимо выделить GPU-ускорители.
2. Скачайте файл ноутбука и загрузите его в Jupyter Notebook: train_cifar10 (IPYNB, 12 Кб) 
3. По желанию, отредактируйте переменную max_epoch. Чем больше эпох обучения, тем точнее будут результаты классификации.

Обучение с использованием очереди задач (рекомендуется)

При запуске вычислений через очередь задач Вам не придется дожидаться онлайн освобождения ресурсов. Планировщик автоматически запустит и выполнит вашу задачу по мере появления ресурсов, а все результаты сохранятся в домашней директории. В таком режиме пользователи могут ставить в очередь сотни задач сразу с различными входными параметрами и не беспокоиться, что после первой задачи нужно запустить вторую. Все произойдет автоматически.
1. Пример sbatch-файла запуска расположен на суперкомпьютере. Скопируйте его себе в домашний каталог: cp /opt/software/python/examples/pytorch-cifar/torch_cifar.sbatch .

2. Запустите задачу обучения командой sbatch torch_cifar.sbatch
3. Вывод процесса обучения будет отображаться в файле ~/torch_cifar_xxxxxx.log, где xxxxxx - присвоенный номер задачи.

Процесс обучения нейронной сети займёт некоторое время. С увеличением переменной max_epoch увеличивается время обучения, но и повышается точность.
После каждой эпохи модель проходит тестирование на тестовых данных. Если точность модели в данной эпохе превышает предыдущие значения, то модель записывается в файл ~/checkpoint/ckpt.pth

Использование искусственной нейронной сети

Пример работы обученной нейронной сети можно получить с использованием следующего кода:
import numpy as np
import matplotlib.pyplot as plt
img = testset[14][0] # Изображение из тестовой выборки, измените номер для другого изображения label = testset[14][1] # Класс изображения из тестовой выборки, номер должен соответствовать номеру изображения выше img_np = img.numpy() img_np = np.transpose(img_np, (1, 2, 0)) plt.imshow(img_np) plt.show() img = img.reshape(1, 3, 32, 32) with torch.no_grad(): logits = net(img) predicted_label = torch.argmax(logits) print(f"Label: {classes[label]}") print(f"Predicted: {classes[predicted_label.item()]}")
Выбирается изображение из тестовой выборки и сеть классифицирует его. Как видно на изображении нижу, результат (Predicted) совпадает с исходным классом (Label). Для классификации других изображений измените его номер в тестовой выборке - testset[14].

Дополнительная информация

Инструкция обновлена: 30.12.2022

 

Нашли опечатку?
Выделите её, нажмите Ctrl+Enter и отправьте нам уведомление. Спасибо за участие!
Сервис предназначен только для отправки сообщений об орфографических и пунктуационных ошибках.