Благодарим за настройку Google I/O. Посмотреть все сеансы по запросу Смотреть по запросу

Кластеризация веса

Поддерживается Arm ML Tooling

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

Обзор

Кластеризация или разделение веса уменьшает количество уникальных значений веса в модели, что дает преимущества при развертывании. Сначала он группирует веса каждого слоя в N кластеров, а затем разделяет значение центроида кластера для всех весов, принадлежащих кластеру.

Этот метод приносит улучшения за счет сжатия модели. Будущая поддержка фреймворка позволит улучшить объем используемой памяти, что может иметь решающее значение для развертывания моделей глубокого обучения во встроенных системах с ограниченными ресурсами.

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

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

Матрица совместимости API

Пользователи могут применять кластеризацию со следующими API:

  • Построение модели: 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 (МБ)
Мобильная сеть V1 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
МобильныйNetV2 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.

  1. Сериализировать модель Keras в файл .h5.
  2. Преобразуйте файл .h5 в .tflite, используя TFLiteConverter.from_keras_model_file()
  3. Сожмите файл .tflite в zip

Примеры

В дополнение к примеру Weight clustering в Keras см. следующие примеры:

  • Кластеризация весов модели CNN, обученной на наборе данных классификации рукописных цифр MNIST: код

Реализация весовой кластеризации основана на документе Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding . См. главу 3, озаглавленную Обученное квантование и разделение веса .