В Части 1 мы уже настроили подходящую среду разработки для этого небольшого проекта. Теперь давайте погрузимся в код. :)

Наша цель — создать модель глубокого обучения для распознавания рукописных цифр и преобразовать эту модель в CoreML, чтобы мы могли импортировать ее в наше приложение для iOS.

Подготовить данные

На мой взгляд, это одна из самых важных частей построения любой модели контролируемого обучения. Ваш набор данных должен быть сбалансирован и охватывать большинство случаев. Это непростая задача, но, к счастью для этого небольшого проекта, у нас есть общедоступный набор данных: Набор данных MNIST. А еще лучше, что Keras уже имеет встроенную поддержку этого набора данных. Для простоты мы будем использовать пакет Keras Dataset для загрузки данных обучения и проверки.

Во-первых, нам нужна функция для загрузки данных и выполнения предварительной обработки:

Наш набор данных MNIST содержит 60 000 образцов в обучающем наборе и 10 000 образцов в тестовом наборе. Каждый образец представляет собой изображение в градациях серого размером 28 x 28, поэтому входной размер равен n x 28 x 28 x 1. Матрица содержит значение RGB в градациях серого (0–255), мы можем использовать минимальную-максимальную нормализацию для нормализации входных данных. См. строки 9 и 10.

Результатом обучающей и тестовой выборки является матрица 1x1 со значением 0–9. Мы будем использовать однократное кодирование для преобразования вывода в матрицу 1x10. Keras предоставляет удобный метод в utils библиотеке: to_categorical .

Создайте и обучите модель

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

Поскольку наше изображение такое маленькое, я добавляю такое же дополнение к слою свертки, чтобы мы не потеряли слишком много функций. Вот как я строю эту модель в Keras:

Как только модель построена, мы готовы обучить данные.

Улучшение

Если вы просто используете эту модель, она должна охватывать большую часть случая, но вы также заметите, что если вы пишете цифры немного не по центру или с некоторым поворотом, модель не распознает их должным образом. Мы можем улучшить это, используя Kera ImageDataGenerator для увеличения данных. Добавим в наш метод fit опцию увеличения данных:

Сохраните модель

После обучения нашей модели нам нужно экспортировать ее в файл .h5, чтобы мы могли использовать ее для преобразования в CoreML. Поскольку мы добавили Dropout слоев в нашу модель для достижения лучшего результата, нам нужно будет удалить их при экспорте, потому что мы хотим полного соединения нейронов во время прогнозирования.

Преобразователь сборки

Используя coremltools , довольно просто создать преобразователь, мы предоставляем файл модели, который мы экспортировали ранее, определяем метки классов, которые представляют собой список цифр от 0 до 9, а также входные и выходные параметры. Ниже приведен конвертер, который я создал для ввода необходимой информации из командной строки.

Полный код находится на github. В следующем посте мы рассмотрим, как создать приложение для iOS, чтобы вы могли рисовать цифру в представлении и использовать модель для ее распознавания. Быть в курсе.