Agrupación de peso

Mantenido por Arm ML Tooling

Este documento proporciona una descripción general sobre la agrupación de pesos para ayudarle a determinar cómo se adapta a su caso de uso.

Descripción general

La agrupación en clústeres, o peso compartido, reduce la cantidad de valores de peso únicos en un modelo, lo que genera beneficios para la implementación. Primero agrupa los pesos de cada capa en N grupos, luego comparte el valor del centroide del grupo para todos los pesos que pertenecen al grupo.

Esta técnica aporta mejoras mediante la compresión del modelo. El soporte futuro del marco puede desbloquear mejoras en la huella de memoria que pueden marcar una diferencia crucial para implementar modelos de aprendizaje profundo en sistemas integrados con recursos limitados.

Hemos experimentado con la agrupación en tareas de visión y habla. Hemos visto mejoras de hasta 5 veces en la compresión del modelo con una pérdida mínima de precisión, como lo demuestran los resultados que se presentan a continuación.

Tenga en cuenta que la agrupación proporcionará beneficios reducidos para las capas densas y de convolución que preceden a una capa de normalización por lotes, así como en combinación con la cuantificación posterior al entrenamiento por eje.

Matriz de compatibilidad API

Los usuarios pueden aplicar la agrupación en clústeres con las siguientes API:

  • Construcción de modelos: keras solo con modelos Secuenciales y Funcionales
  • Versiones de TensorFlow: TF 1.x para las versiones 1.14+ y 2.x.
    • No se admiten tf.compat.v1 con un paquete TF 2.X y tf.compat.v2 con un paquete TF 1.X.
  • Modo de ejecución de TensorFlow: gráfico y ansioso

Resultados

Clasificación de imágenes

Modelo Original agrupado
Precisión superior (%) Tamaño de .tflite comprimido (MB) Configuración # de conglomerados Precisión superior (%) Tamaño de .tflite comprimido (MB)
MóvilNetV1 70.976 14,97
Selectivo (últimas 3 capas de Conv2D) 16, 16, 16 70.294 7,69
Selectivo (últimas 3 capas de Conv2D) 32, 32, 32 70,69 8.22
Completo (todas las capas de Conv2D) 32 69,4 4.43
MóvilNetV2 71.778 12.38
Selectivo (últimas 3 capas de Conv2D) 16, 16, 16 70.742 6.68
Selectivo (últimas 3 capas de Conv2D) 32, 32, 32 70.926 7.03
Completo (todas las capas de Conv2D) 32 69.744 4.05

Los modelos fueron entrenados y probados en ImageNet.

Detección de palabras clave

Modelo Original agrupado
Precisión superior (%) Tamaño de .tflite comprimido (MB) Configuración # de conglomerados Precisión superior (%) Tamaño de .tflite comprimido (MB)
DS-CNN-L 95.233 1.46
Completo (todas las capas de Conv2D) 32 95.09 0,39
Completo (todas las capas de Conv2D) 8 94.272 0,27

El modelo fue entrenado y probado en SpeechCommands v0.02.

  1. Serializar el modelo Keras en un archivo .h5
  2. Convierta el archivo .h5 en .tflite usando TFLiteConverter.from_keras_model_file()
  3. Comprime el archivo .tflite en un zip

Ejemplos

Además del ejemplo de agrupación de pesos en Keras , consulte los siguientes ejemplos:

  • Agrupe los pesos de un modelo CNN entrenado en el conjunto de datos de clasificación de dígitos escritos a mano de MNIST: código

La implementación de la agrupación de pesos se basa en el artículo Compresión profunda: compresión de redes neuronales profundas con poda, cuantificación entrenada y codificación Huffman . Consulte el capítulo 3, titulado Cuantización entrenada y reparto de peso .