В предыдущей статье я упоминал о преимуществах использования предварительно обученной модели или использования существующего набора данных при изучении глубокого обучения.
И большинство парней, имеющих опыт обучения программированию, знают базовый шаг под названием «привет, мир».
«Привет, мир» для глубокого обучения - это модель 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.