Поддерживается Arm ML Tooling
В этом документе представлен обзор весовой кластеризации, который поможет вам определить, насколько она соответствует вашему варианту использования.
- Чтобы углубиться в сквозной пример, см. пример весовой кластеризации .
- Чтобы быстро найти API, необходимые для вашего варианта использования, см. подробное руководство по весовой кластеризации .
Обзор
Кластеризация или распределение веса уменьшает количество уникальных значений веса в модели, что дает преимущества при развертывании. Сначала он группирует веса каждого слоя в N кластеров, затем разделяет значение центроида кластера для всех весов, принадлежащих кластеру.
Этот метод приносит улучшения за счет сжатия модели. Будущая поддержка платформы может открыть возможности для улучшения объема памяти, что может иметь решающее значение для развертывания моделей глубокого обучения во встроенных системах с ограниченными ресурсами.
Мы экспериментировали с кластеризацией зрительных и речевых задач. Мы наблюдали пятикратное улучшение сжатия модели с минимальной потерей точности, о чем свидетельствуют результаты , представленные ниже.
Обратите внимание, что кластеризация обеспечит меньшие преимущества для сверточных и плотных слоев, которые предшествуют слою пакетной нормализации, а также в сочетании с поосевым квантованием после обучения.
Матрица совместимости API
Пользователи могут применять кластеризацию с помощью следующих API:
- Построение модели:
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 (МБ) | |
МобилНетВ1 | 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 | |||
МобилНетВ2 | 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 (МБ) | |
ДС-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.
Примеры
Помимо примера кластеризации Weight в Keras , смотрите следующие примеры:
- Кластеризируйте веса модели CNN, обученной на наборе данных классификации рукописных цифр MNIST: код
Реализация весовой кластеризации основана на документе «Глубокое сжатие: сжатие глубоких нейронных сетей с сокращением, обученным квантованием и кодированием Хаффмана» . См. главу 3, озаглавленную «Обученное квантование и распределение веса» .