Сохраните дату! Google I / O возвращается 18-20 мая Зарегистрируйтесь сейчас
Эта страница переведена с помощью Cloud Translation API.
Switch to English

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

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

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

Обзор

Кластеризация или разделение веса уменьшает количество уникальных значений веса в модели, что дает преимущества для развертывания. Сначала он группирует веса каждого слоя в 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.

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

Примеры

Помимо примера кластеризации веса в Keras , посмотрите следующие примеры:

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

Реализация веса кластеризация на основе глубокого сжатия: Compressing Deep Neural Networks С Обрезка, обученные квантование и кодирование Хаффмана бумаги . См. Главу 3, озаглавленную « Обученное квантование и распределение веса» .