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

И большинство парней, имеющих опыт обучения программированию, знают базовый шаг под названием «привет, мир».

«Привет, мир» для глубокого обучения - это модель MNIST для распознавания рукописных цифр.

Краткое описание проблемы MNIST

  • Задача MNIST - это набор данных, разработанный Янном ЛеКуном, Коринной Кортес и Кристофером Берджесом для оценки моделей машинного обучения в задаче классификации рукописных цифр.
  • Изображение цифр было взято из различных документов, нормализовано по размеру и центрировано (для минимизации предварительной обработки данных)
  • Одна из цифр в 10 классах (от 0 до 9) предсказывается путем прохождения изображения через модель MNIST.

Я рассматриваю несколько вариантов использования модели MNIST для изучения глубокого обучения. Как разработчик iOS я решил создать приложение-калькулятор с моделью распознавания рукописных цифр, что означает, что я буду использовать платформу CoreML (анонсировано на WWDC 2017).

Чтобы использовать Core ML Framework, мне нужна модель Keras или Caffe (тип модели и поддерживаемые инструменты).

Керас

Керас, кафе? что это за имена? (Есть еще одна вещь, называемая Tensorflow).

Все они представляют собой инструменты на основе Python для построения модели глубокого обучения.

И эти инструменты предоставляют наборы данных MNIST для построения модели.

  • 60000 наборов данных для обучения
  • 10000 наборов данных для тестирования

Я использовал Keras для построения модели MNIST.

Почему?

  • Простой
  • Существовали тонны примеров.

Давайте построим модель Кераса!

Установка Кераса

С помощью этой простой строчки у вас может быть Keras. Бум :)

pip install keras

И это нужно для сохранения модели keras с расширением файла h5

pip install h5py

Построение модели MNIST

Для построения модели MNIST необходимо выполнить 5 этапов.

  • Подготовка набора данных
  • Построить сеть для модели
  • Тренироваться
  • Тестовое задание
  • Сохранить модель

Подготовка (загрузка наборов данных)

Подготовка (изменение формы, предварительная обработка)

Создайте сеть CNN

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

А вот и целый код на питоне.

А вот и точность. Показывает 99,27%

x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/10
179s - loss: 0.1641 - acc: 0.9480 - val_loss: 0.0611 - val_acc: 0.9801
Epoch 2/10
181s - loss: 0.0428 - acc: 0.9861 - val_loss: 0.0355 - val_acc: 0.9884
Epoch 3/10
163s - loss: 0.0275 - acc: 0.9913 - val_loss: 0.0231 - val_acc: 0.9921
Epoch 4/10
155s - loss: 0.0227 - acc: 0.9926 - val_loss: 0.0292 - val_acc: 0.9907
Epoch 5/10
155s - loss: 0.0171 - acc: 0.9946 - val_loss: 0.0249 - val_acc: 0.9930
Epoch 6/10
169s - loss: 0.0141 - acc: 0.9954 - val_loss: 0.0317 - val_acc: 0.9905
Epoch 7/10
166s - loss: 0.0131 - acc: 0.9960 - val_loss: 0.0320 - val_acc: 0.9909
Epoch 8/10
160s - loss: 0.0101 - acc: 0.9966 - val_loss: 0.0333 - val_acc: 0.9915
Epoch 9/10
159s - loss: 0.0093 - acc: 0.9971 - val_loss: 0.0247 - val_acc: 0.9929
Epoch 10/10
157s - loss: 0.0088 - acc: 0.9970 - val_loss: 0.0228 - val_acc: 0.9927

Теперь у нас есть модель приложения для калькулятора рукописных цифр.

Далее я посмотрю, как преобразовать модель keras в модель coreml.

Скачать приложение ССЫЛКА