Глубокое обучение было неотъемлемой частью науки о данных. После всего, что связано с исследованием, анализом и визуализацией, большая часть остается предсказанием, и в большинстве случаев для этого мы часто склоняемся к нейронным сетям.
TensorFlow был основой глубокого обучения. Но что такое TensorFlowLite? Давайте сначала укажем
Поэкспериментируйте с несколькими уровнями, функциями активации, скрытыми блоками и т. Д.
И когда точность хороша
МЫ СДЕЛАЛИ!!!! ПРАВИЛЬНО?
Но, как стажер по науке о данных @ 1mg, я узнал еще об одном аспекте, а именно о оптимизации с точки зрения как размера, так и задержки. Это потому, что именно в промышленной реализации мы ограничены ресурсами (мир Kaggle довольно далек от реальности !!)
Следовательно, для начала мне была предоставлена существующая модель на 744 МБ (для некоторой бинарной классификации). Поскольку размер огромен, его невозможно развернуть без какой-либо оптимизации.
Настало время, когда на помощь пришел Tensorflow Lite!
Прежде чем двигаться дальше, давайте сначала разберемся с квантованием.
Квантование- Это относится к отображению некоторых значений (непрерывных) в конечный диапазон дискретных значений. В качестве примера можно взять округление, масштабирование, усечение десятичных частей.
Tensorflow lite также выполняет такое квантование модели, преобразуя 32-битное представление в 8-битное.
Возвращаясь, позвольте мне рассказать вам о шагах, которым нужно следовать.
На заметку из приведенного выше фрагмента кода:
- from_keras_model_file () используется только для моделей Keras. Для других моделей см. здесь
- Оптимизация имеет 3 варианта: DEFAULT, OPTIMIZE_FOR_SIZE, OPTIMIZE_FOR_LATENCY.
- После этого запишите модель с расширением .tflite в виде двоичного файла.
Преобразование выполнено, теперь самое сложное, с использованием модели tflite для прогнозирования -
На заметку из приведенного выше фрагмента:
- Входные данные могут подаваться один за другим (с использованием цикла или генератора) в виде списка, то есть списка с одним элементом (как «[x]» выше в set_tensor)
- Последняя строка преобразовывает вывод (список массивов), полученный в виде списка элементов (каждый прогноз как один элемент)
И ЭТО СДЕЛАНО !!!!
Вот несколько важных фактов обо всем этом квантовании, которое мы только что сделали:
- Tensorflow Lite предназначен для устройств Android / IoT. Следовательно, можно будет уменьшить его размер. Но если его нужно развернуть где-нибудь еще (на серверах), это сильно повлияет на задержку.
Размер может уменьшиться примерно в 10 раз (для моей модели около 12, с 744 МБ до 62 МБ).
Задержка уменьшена со 100 изображений в секунду до 5 изображений в секунду.
Точность осталась примерно такой же (примерно 0,5%), но ROC-AUC осталась. сильно поражены (6-7%, от 0,89 до 0,82)
- Низкая задержка (кроме мобильных устройств) связана с загрузкой модели с помощью интерпретатора (фрагмент 2). Интерпретатор ищет процессор ARM и включает некоторое внутреннее преобразование для использования модели .tflite на серверах, вызывая задержку в Interpreter.invoke (). И поскольку это должно использоваться для каждого прогноза, задержка сравнительно довольно велика.
Я буду больше исследовать эту проблему с задержкой, и если я найду какое-то решение, будьте готовы к следующему !!!