Mantenido por Arm ML Tooling
En este documento, se proporciona una descripción general sobre el agrupamiento en clústeres por peso para que puedas determinar cómo se adapta a tu caso de uso.
- Para conocer en profundidad un ejemplo de extremo a extremo, consulta el ejemplo de agrupamiento en clústeres por peso.
- A fin de encontrar rápidamente las API que necesitas para tu caso de uso, consulta la guía completa de agrupamiento en clústeres por peso.
Resumen
El agrupamiento en clústeres, o el uso de pesos compartidos, 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 clústeres; luego, comparte el valor centroide del clúster con todos los pesos que pertenecen al clúster.
Esta técnica permite realizar mejoras mediante la compresión de modelos. La compatibilidad con marcos de trabajo en el futuro puede desbloquear mejoras en el uso de la memoria, que marquen una diferencia crucial para implementar modelos de aprendizaje profundo en sistemas incorporados con recursos limitados.
Experimentamos con la agrupación en clústeres en las tareas de visión y de voz. Observamos hasta 5 mejoras en la compresión de modelos con una pérdida de exactitud mínima, como se demuestra en los resultados de más abajo.
Ten en cuenta que la agrupación en clústeres brinda beneficios limitados para capas densas y convolucionales que preceden a una capa de normalización por lotes, así como también, en combinación con la cuantización por eje posterior al entrenamiento.
Matriz de compatibilidad de API
Los usuarios pueden aplicar el agrupamiento en clústeres con las siguientes API:
- Compilación de modelos:
tf.keras
solo con modelos secuenciales y funcionales - Versiones de TensorFlow: TF 1.x para las versiones 2.x y las posteriores a 1.14.
tf.compat.v1
con un paquete TF 2.X ytf.compat.v2
con un paquete TF 1.X no son compatibles
- Modo de ejecución de TensorFlow: inmediata y por grafos
Resultados
Clasificación de imágenes
Modelo | Original | Agrupado | ||||
---|---|---|---|---|---|---|
Precisión más alta (%) | Tamaño del .tflite comprimido (MB) | Configuración | Cantidad de clústeres | Precisión más alta (%) | Tamaño del .tflite comprimido (MB) | |
MobileNetV1 | 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 | |||
MobileNetV2 | 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 se entrenaron y probaron en ImageNet.
Detección de palabras clave
Modelo | Original | Agrupado | ||||
---|---|---|---|---|---|---|
Precisión más alta (%) | Tamaño del .tflite comprimido (MB) | Configuración | Cantidad de clústeres | Precisión más alta (%) | Tamaño del .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 se entrenó y probó en SpeechCommands v0.02.
- Serializa el modelo de Keras a un archivo .h5.
- Convierte el archivo .h5 en .tflite con
TFLiteConverter.from_keras_model_file()
- Comprime el archivo .tflite en un archivo ZIP
Ejemplos
Además del ejemplo de agrupamiento en clústeres de Keras, puedes consultar los siguientes ejemplos:
- Agrupa los pesos de un modelo de CNN entrenado con el conjunto de datos de clasificación de dígitos escritos a mano de MNIST: código
La implementación del agrupamiento en clústeres por peso se basa en el artículo Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding (Compresión profunda: Compresión de redes neuronales profundas con reducción, cuantización entrenada y codificación Huffman). Consulta el capítulo 3, titulado Trained Quantization and Weight Sharing (La cuantización entrenada y el uso de pesos compartidos).