Kinetica — это аналитический механизм с базой данных с ускорением на графическом процессоре, который позволяет анализировать данные в режиме реального времени по мере того, как механизм базы данных обрабатывает данные в памяти графического процессора. TensorFlow — это библиотека для машинного и глубокого обучения, которая также может использовать возможности графических процессоров. Объединение этих двух технологий позволяет вам использовать данные в режиме реального времени в приложениях машинного обучения на основе данных из вашей базы данных Kinetica. данные классификации изображений с использованием многослойной нейронной сети. Мы будем использовать Kinetica API и пользовательские функции (UDF). Весь необходимый исходный код (Python) для работы примера можно скачать здесь.

Введение

Задача, которую мы решим, состоит в том, чтобы изучить модель, которая представляет шаблоны рукописных цифр на основе размеченных данных, где для каждого изображения мы знаем, какая цифра это на самом деле. В терминологии машинного обучения это называется обучением. Затем мы применим эту модель к новым неразмеченным данным, чтобы классифицировать («предсказать») для каждой входной строки, какая цифра наиболее вероятна. Это то, что мы называем выводом. Разобьем процесс на четыре части:

  1. Прием — заполнение и настройка базы данных для этой демонстрации
  2. Обучение — изучение модели
  3. Вывод — применение модели
  4. Оценка — насколько точны наши классификации?

Проглатывание

Таблицы, которые нам нужны

Для нашего сквозного процесса нам нужно настроить четыре таблицы:

  • Таблица Mnist_training_input будет содержать все изображения рукописных цифр, включая их метки, которые мы будем использовать для обучения модели.
  • В Mnist_inference_input мы отделим меньшую часть наших исходных данных. Позже модель будет применена к этим данным для классификации. Эта таблица также содержит известные метки, поэтому мы сможем оценить, насколько точна модель.
  • Выведем результаты классификации в таблицу Mnist_inference_result.
  • Сама модель будет храниться в Mnist_train_output.

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

Определение типов

Все таблицы определены в файле DatabaseDefinitions.py, например. тип таблицы для хранения модели имеет 5 столбцов, причем столбец модели находится в двоичном формате. Сценарий Ingestion.py использует эти определения типов для создания таблиц. Это все чистый Kinetica API, без использования TensorFlow.

Запуск загрузки

Чтобы запустить настройку и прием таблицы, мы просто запускаем скрипт Ingestion.py. Это сохранит изображения в двоичном формате в соответствующих таблицах. Обратите внимание, что этикетка хранится в одноразовом формате, а также в читаемом формате для удобства.

В пользовательском интерфейсе Kinetica результат должен выглядеть так, как показано на снимке экрана ниже:

Обучение

Определение пользовательской функции

Пользовательская функция для обучения модели определена в TrainUDF.py. Это чистый код TensorFlow, за исключением мест, где мы считываем данные и где храним модель. Это достигается с помощью другого класса — KineticaIO.py, утилиты, облегчающей такие задачи. Вызов утилиты KineticaIO происходит в методе main() TrainUDF.py с помощью всего двух строк кода (чтение данных, сохранение модели).

Обратите внимание, что основной метод начинается с

proc_data = ProcData()

и заканчивается

proc_data.complete().

Это сообщает Kinetica, что промежуточный код является кодом UDF. Дескриптор proc_data также позволяет получить доступ к таблицам и столбцам. Это не требуется в данной UDF, но мы увидим пример позже на шаге вывода.

Регистрация и выполнение пользовательской функции

В Training.py мы делаем механику регистрации и выполнения UDF. Обратите внимание, что в этом примере UDF регистрируется в «нераспределенном» режиме. Мы будем использовать распределенный режим позже на этапе вывода. Вы также можете распределить этап обучения, но тогда вам придется позаботиться об объединении моделей, чего мы здесь не делаем для простоты.

Проведение обучения

Все, что нам нужно сделать, чтобы запустить обучение, — это запустить Training.py. В результате должна получиться модель, хранящаяся в таблице Mnist_train_output:

Вывод

InferenceUDF.py

Подобно тому, что было сделано при обучении, мы поместили код TensorFlow для приложения модели в UDF между дескриптором proc_data. На этот раз мы также используем дескриптор для доступа к именам таблиц входных и выходных данных (в данном примере это «Mnist_inference_input» и «Mnist_inference_output»). Вы можете увидеть, как осуществляется доступ к различным столбцам выходной таблицы и как они заполняются данными, такими как фактические классификации, идентификатор модели, известные метки и т. д.

Выполнение вывода

Нам просто нужно запустить Inference.py. Вывод настроен для работы в распределенном режиме. Результатом должна стать таблица «Mnist_inference_output», заполненная классификациями вместе с истинными метками, чтобы мы могли оценить результат.

Оценка

KiSQL

Интерфейс KiSQL в пользовательском интерфейсе Kinetica можно использовать для быстрой и простой оценки. Например, приведенный ниже запрос покажет для каждой цифры, сколько раз она была классифицирована правильно, а сколько неправильно:

Показать

Для визуальной оценки мы можем использовать Reveal, структуру визуализации в Kinetica. Например, диаграмма Санки может быть хорошим инструментом для отображения распределения неправильных и правильных классификаций. Из приведенной ниже визуализации мы быстро можем определить, что большинство цифр классифицируются правильно, но с нашими текущими параметрами модели в основном проблемы вызывают цифры 8 и 9:

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

https://www.kinetica.com/trial/

Еще две полезные страницы, на которые стоит обратить внимание, — это общая документация Kinetica API (Python):

https://www.kinetica.com/docs/api/python/index.html

А также документацию о том, как писать пользовательские функции (UDF), в частности:

https://www.kinetica.com/docs/udf/python/writing.html

Следите за дальнейшими публикациями, связанными с наукой о данных!

Первоначально опубликовано на www.kinetica.com 30 мая 2018 г.