В этой статье мы увидим реализацию сверточной нейронной сети (CNN) с использованием Keras на наборе данных MNIST, а затем сравним результаты с обычной нейронной сетью. Настоятельно рекомендуется сначала прочитать сообщение Сверточная нейронная сеть - в двух словах, прежде чем переходить к реализации CNN, чтобы развить интуицию в отношении CNN.

1. Введение

Набор данных MNIST чаще всего используется для изучения классификации изображений. База данных MNIST содержит изображения рукописных цифр от 0 до 9, сделанные сотрудниками Американского бюро переписи населения и американскими школьниками. Он разделен на 60 000 обучающих изображений и 10 000 тестовых изображений. И Tensorflow, и Keras позволяют нам загружать набор данных MNIST напрямую с помощью API.

2- Загрузить набор данных с помощью API

Мы будем использовать только две строки кода для импорта TensorFlow и загрузки набора данных MNIST под Keras API. Распределим данные по обучающей и тестовой выборкам. Части x_train и x_test содержат коды RGB в градациях серого (от 0 до 255), а части y_train и y_test содержат метки от 0 до 9.
Мы будем визуализировать изображения с помощью библиотеки «matplotlib».

Важно подчеркнуть, что каждое изображение в наборе данных MNIST имеет размер 28 X 28 пикселей, что означает, что форма x_train имеет вид (60000, 28, 28), где 60 000 - это количество выборок. Мы должны изменить x_train с 3-х измерений на 4-х измерения в качестве требования для обработки через Keras API. Кроме того, мы должны нормализовать наши данные, иначе наши вычислительные затраты будут очень высокими. Мы можем добиться этого, разделив коды RGB на 255 следующим образом:

3- Архитектура сверточной нейронной сети

Сначала мы определим архитектуру сверточных нейронных сетей следующим образом:

1- Первый скрытый слой - это сверточный слой, называемый Convolution2D. Мы будем использовать 32 фильтра размером 5 × 5 каждый.

2- Затем слой Max pooling с размером пула 2 × 2.

3- Еще один сверточный слой с 64 фильтрами размером 5 × 5 каждый.

4- Затем слой Max pooling с размером пула 2 × 2.

5- Затем следует слой Flatten, который преобразует данные 2D-матрицы в 1D-вектор перед построением полностью связанных слоев.

6. После этого мы будем использовать полностью связанный слой с 1024 нейронами и функцией активации relu.

7- Затем мы будем использовать слой регуляризации под названием Dropout. Он настроен на случайное исключение 20% нейронов в слое, чтобы уменьшить переобучение.

8- Наконец, выходной слой, который имеет 10 нейронов для 10 классов и функцию активации softmax для вывода вероятностных прогнозов для каждого класса.

Решив вышесказанное, мы можем настроить модель нейронной сети с помощью нескольких строк кода следующим образом:

Примечание.

- Комментарии снабжены символом "#" для объяснения команд.

- Вы можете загрузить iPython notebook и обучить модель на своем ПК или просто скопировать и вставить этот код в файл .py.

Шаг 1. Создайте модель.

Keras сначала создает новый экземпляр объекта модели, а затем добавляет к нему слои один за другим. Это называется последовательным модельным API. Мы можем добавлять слои в нейронную сеть, просто вызывая model.add и передавая тип слоя, который мы хотим добавить. Наконец, мы скомпилируем модель с двумя важными данными, функцией потерь и алгоритмом оптимизации затрат.

Как только мы выполним приведенный выше код, Керас за кулисами построит модель TensorFlow.

Шаг 2. Обучите модель.

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

Шаг 3. Протестируйте модель.

Мы можем протестировать модель, вызвав model.evaluate и передав набор тестовых данных и ожидаемый результат.

Шаг 4. Сохраните и загрузите модель:

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

Ваша модель будет сохранена в формате иерархических данных (HDF) с расширением .h5. Он содержит многомерные массивы научных данных.

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

Резюме

  • Мы узнали, как загрузить набор данных MNIST и нормализовать его.
  • Мы изучили реализацию CNN с помощью Keras.
  • Мы увидели, как сохранить обученную модель и загрузить ее позже для прогнозирования.
  • Точность составляет более 98%, что намного больше того, что мы достигли с помощью обычной нейронной сети.