Введение в построение нейронной сети прямого распространения (Feedforward)

автор

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

Вы научитесь программировать и создавать нейронную сеть прямого распространения (feedforward neural networks FNN или FF) уже сегодня при помощи PyTorch. Здесь изложена кодовая база jupyter для FNN.

FNN: https://github.com/yhuag/neural-network-lab
Отличная статья для старта: Шпаргалка по разновидностям нейронных сетей

Приступим к работе

1. Убедитесь, что на вашем компьютере установлены PyTorch и Python 3.6;

2. Проверьте корректность установки Python, используя данную команду в консоли:

На выходе должна быть версия Python 3.6.3 или выше.

3. Откройте хранилище (папку) и создайте свой первый файл нейросети:

Начинаем писать код

Все изложенные коды должны быть написаны в файле fnn.py

Импорт PyTorch

Так мы загрузим PyTorch в скрипт. Отлично! Мы уже на полпути.

Инициализация Гипер-параметров

Гипер-параметры – это мощные аргументы с предварительной настройкой и не будут обновляться в ходе изучения нейронной сети.

Загрузка набора данных MNIST

MNIST – это огромная база данных с тоннами прописанных чисел (т.е. от 0 до 9), которая направлена на обработку изображений.

Загрузка набора данных. После загрузки MNIST, мы загружаем набор данных в наш код:

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

Создаем нейронную сеть Feedforward

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

Структура модели нейросети

Нейронная сеть включает в себя два полностью соединенных слоя (т.е. fc1 и fc2) и нелинейный слой ReLU между ними. Как правило, мы называем эту структуру 1-скрытый слой нейросети, отбрасывая слой вывода (fc2).

Запустив следующий код, указанные изображения (х) могут пройти через нейронную сеть и сгенерировать вывод (out), показывая, как именно соответствие принадлежит каждому из 10 классов. Например, изображение кошки соответствует изображению собаки на 0.8, в то врем я как соответствие изображению самолета – 0.3.

Демонстрация нейросети

Мы только что создали настоящую нейронную сеть по нашей структуре.

Включаем графический процессор (GPU)

Обратите внимание: вы можете включить эту строку для запуска кодов на GPU

Выбираем функцию потерь и оптимизатор

Функция потерь (критерий) выбирает, как выходные данные могут быть сопоставлены с классом. Это определяет, как хорошо или плохо работает нейросеть. Оптимизатор выбирает способ обновления веса, чтобы найти область, в которой будет найден лучшие параметры в конкретной нейросети.

Тренируем нейросеть

Этот процесс займет примерно 3-5 минут, в зависимости от работоспособности вашего компьютера. Подробные инструкции находятся в комментариях (после #) в следующих примерах.

Тестируем модель нейросети

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

  1. Проходит без подсчета потерь и веса;
  2. Нет обновления веса;
  3. Корректный расчет прогноза

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

Поздравляем! Вы создали вашу первую рабочую нейронную сеть прямого распространения (Feedforward).

Что дальше?

Сохраняем и закрываем файл. Запускаем файл в консоли:

Процесс тренировки будет выглядеть следующим образом:

Спасибо, что уделили время. Надеюсь, вам понравилась данная статья. Весь код из статьи можно найти на github тут.

Данная статья была основана на разработки пользователя Yunjey у которого отличная библиотека примеров.