Эта часть блога требует некоторых предварительных знаний о том, что такое нейронные сети и как они функционируют. Вот две ссылки (1 и 2) на относительно полное введение в нейронные сети.

Краткое введение в сверточные нейронные сети

Сверточные нейронные сети (CNN) черпают вдохновение из биологических процессов, в первую очередь зрительной коры головного мозга. Эксперимент 1962 года, проведенный Хьюбелом и Визелем, привел к открытию, что определенные отдельные нейроны срабатывают только при наличии краев определенной ориентации и местоположения при наличии визуального стимула. Эксперимент также предполагает, что нейроны располагаются слоями в виде столбчатой ​​структуры, связанной с визуальным восприятием.

Структура ConvNet

Короче говоря, CNN могут быть описаны как имеющие сверточный, объединяющий и полносвязный уровень. Каждый слой CNN преобразует трехмерный входной объем в трехмерный выходной объем активаций, а нейроны в CNN располагаются как (ширина, высота, глубина).

Сверточные слои

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

В качестве гиперпараметра глубина представляет собой количество фильтров, которые нужно использовать, каждый из которых пытается изучить что-то другое во входных данных. Например. края, цветные пятна и т. д. шаг фильтра показывает, насколько нужно перемещать фильтр по входу за раз (обычно 1 или 2). Размер нулевого отступа, «такой же» будет ограничивать внешние края свернутого изображения нулями, чтобы размеры изображения оставались неизменными. Между тем, заполнение «valid» не будет связывать свернутое изображение нулями и, таким образом, снижает размерность элементов.

Чтобы рассчитать пространственный размер выходного объема, примите во внимание следующее:

  • Пусть W - размер входного объема.
  • Пусть F будет размером рецептивного поля нейронов Conv Layer.
  • Пусть P будет количеством нулевого заполнения
  • Пусть S - шаг фильтра

Объединение слоев

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

Полностью связанный (плотный) слой

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

Для более подробного руководства по ConvNets перейдите по этой ссылке.

Выполнение

Эта реализация ConvNet предназначена для классификации данных в наборе данных MIST, который состоит из серых изображений 28 x 28 пикселей записанных цифр [0–9].

Более подробную информацию о наборе данных можно найти здесь.

Входной конвейер

  1. Извлекать
  2. Преобразовать
  3. Нагрузка

Модель архитектуры

Уровень конверсии 1:

  • 32 фильтра
  • Ядро размером 5 х 5 пикселей
  • Шаг 1 пиксель
  • «То же» заполнение
  • Активация ReLU

Уровень объединения 1:

  • Максимальное количество операций в пуле
  • Ядро размером 2 х 2 пикселя
  • Шаг 2 пикселя

Уровень конверсии 2 аналогичен уровню конверсии 1, за исключением того, что теперь в нем в два раза больше фильтров, чем раньше.

Уровень объединения 2 будет иметь те же параметры, что и уровень объединения 1.

Полностью связанный слой:

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

Оценка модели

Полный код этой части можно найти здесь.

Пошаговый запуск кода

При настройке кода на вашем компьютере я предоставил документ с требованиями, из которого вы можете просто ввести код в терминал. (Пользователи Windows должны использовать URL-адрес, указанный в браузере, для установки Python)

Приведенный ниже код охватывает следующее:

  • Установка python2 или python3
  • Установка pip или pip3
  • Установка virtualenv
  • Установка всех необходимых зависимостей в «активированной» виртуальной среде.
  • Запуск кода и деактивация виртуальной среды

Добавление дополнительных функций:

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

Визуализация результатов с помощью TensorBoard

  • Активировать виртуальную среду
  • Выполните в терминале следующее:
tensorboard --logdir=path/to/log-directory

Хранилище кода можно найти здесь.