Введение в построение нейронной сети прямого распространения (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. Откройте хранилище (папку) и создайте свой первый файл нейросети:

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

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

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

Импорт PyTorch

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что дальше?

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

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

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

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

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