Поддерживается Arm ML Tooling
В этом документе представлен обзор весовой кластеризации, который поможет вам определить, насколько она соответствует вашему варианту использования.
- Чтобы погрузиться прямо в пример от начала до конца, см. Пример кластеризации веса .
- Чтобы быстро найти API-интерфейсы, необходимые для вашего варианта использования, см. Подробное руководство по весовой кластеризации .
Обзор
Кластеризация или разделение веса уменьшает количество уникальных значений веса в модели, что дает преимущества для развертывания. Сначала он группирует веса каждого слоя в N кластеров, а затем разделяет значение центроида кластера для всех весов, принадлежащих кластеру.
Этот метод приносит улучшения за счет сжатия модели. Поддержка будущей платформы может разблокировать улучшения в объеме памяти, которые могут иметь решающее значение для развертывания моделей глубокого обучения во встроенных системах с ограниченными ресурсами.
Мы экспериментировали с кластеризацией задач, связанных со зрением и речью. Мы наблюдали 5-кратное улучшение сжатия модели с минимальной потерей точности, о чем свидетельствуют результаты, представленные ниже.
Обратите внимание, что кластеризация обеспечивает меньшие преимущества для сверточных и плотных слоев, которые предшествуют слою пакетной нормализации, а также в сочетании с посттренировочным квантованием по каждой оси.
Матрица совместимости API
Пользователи могут применять кластеризацию с помощью следующих API:
-
tf.keras
модели:tf.keras
только с последовательными и функциональными моделями - Версии TensorFlow: TF 1.x для версий 1.14+ и 2.x.
-
tf.compat.v1
с пакетом TF 2.X иtf.compat.v2
с пакетом TF 1.X не поддерживаются.
-
- Режим выполнения TensorFlow: как график, так и нетерпеливый
Полученные результаты
Классификация изображений
Модель | Оригинал | Кластеризованный | ||||
---|---|---|---|---|---|---|
Топ-1 точность (%) | Размер сжатого .tflite (МБ) | Конфигурация | # кластеров | Топ-1 точность (%) | Размер сжатого .tflite (МБ) | |
MobileNetV1 | 70,976 | 14,97 | ||||
Выборочный (последние 3 слоя Conv2D) | 16, 16, 16 | 70,294 | 7,69 | |||
Выборочный (последние 3 слоя Conv2D) | 32, 32, 32 | 70,69 | 8,22 | |||
Полный (все слои Conv2D) | 32 | 69,4 | 4,43 | |||
MobileNetV2 | 71,778 | 12,38 | ||||
Выборочный (последние 3 слоя Conv2D) | 16, 16, 16 | 70,742 | 6,68 | |||
Выборочный (последние 3 слоя Conv2D) | 32, 32, 32 | 70,926 | 7,03 | |||
Полный (все слои Conv2D) | 32 | 69,744 | 4,05 |
Модели были обучены и протестированы на ImageNet.
Определение ключевых слов
Модель | Оригинал | Кластеризованный | ||||
---|---|---|---|---|---|---|
Топ-1 точность (%) | Размер сжатого файла .tflite (МБ) | Конфигурация | # кластеров | Топ-1 точность (%) | Размер сжатого файла .tflite (МБ) | |
DS-CNN-L | 95,233 | 1,46 | ||||
Полный (все слои Conv2D) | 32 | 95,09 | 0,39 | |||
Полный (все слои Conv2D) | 8 | 94 272 | 0,27 |
Модель обучалась и тестировалась на SpeechCommands v0.02.
- Сериализуйте модель Keras в файл .h5
- Преобразуйте файл .h5 в .tflite с помощью
TFLiteConverter.from_keras_model_file()
- Сжать файл .tflite в zip-архив
Примеры
Помимо примера кластеризации веса в Keras , посмотрите следующие примеры:
- Сгруппируйте веса модели CNN, обученной на наборе данных классификации рукописных цифр MNIST: код
Реализация веса кластеризация на основе глубокого сжатия: Compressing Deep Neural Networks С Обрезка, обученные квантование и кодирование Хаффмана бумаги . См. Главу 3, озаглавленную « Обученное квантование и распределение веса» .