Mantenido por TensorFlow Model Optimization
Hay dos formas de cuantificación: cuantificación posterior al entrenamiento y entrenamiento consciente de la cuantificación. Comience con la cuantificación posterior al entrenamiento , ya que es más fácil de usar, aunque el entrenamiento consciente de la cuantificación suele ser mejor para la precisión del modelo.
Esta página proporciona una descripción general de la capacitación consciente de la cuantificación para ayudarlo a determinar cómo encaja con su caso de uso.
- Para sumergirse directamente en un ejemplo de extremo a extremo, consulte el ejemplo de entrenamiento consciente de la cuantificación .
- Para encontrar rápidamente las API que necesita para su caso de uso, consulte la guía integral de capacitación consciente de la cuantificación .
Visión general
El entrenamiento consciente de la cuantificación emula la cuantificación del tiempo de inferencia, creando un modelo que las herramientas posteriores utilizarán para producir modelos realmente cuantificados. Los modelos cuantificados utilizan una precisión más baja (por ejemplo, 8 bits en lugar de 32 bits flotantes), lo que genera beneficios durante la implementación.
Implementar con cuantificación
La cuantificación trae mejoras a través de la compresión del modelo y la reducción de la latencia. Con los valores predeterminados de la API, el tamaño del modelo se reduce 4 veces y, por lo general, vemos entre 1,5 y 4 veces mejoras en la latencia de la CPU en los backends probados. Eventualmente, las mejoras de latencia se pueden ver en aceleradores de aprendizaje automático compatibles, como EdgeTPU y NNAPI.
La técnica se utiliza en la producción de casos de uso de voz, visión, texto y traducción. El código actualmente admite un subconjunto de estos modelos .
Experimente con la cuantificación y el hardware asociado
Los usuarios pueden configurar los parámetros de cuantificación (por ejemplo, el número de bits) y, hasta cierto punto, los algoritmos subyacentes. Tenga en cuenta que con estos cambios de los valores predeterminados de la API, actualmente no hay una ruta admitida para la implementación en un backend. Por ejemplo, la conversión de TFLite y las implementaciones del kernel solo admiten la cuantificación de 8 bits.
Las API específicas de esta configuración son experimentales y no están sujetas a compatibilidad con versiones anteriores.
Compatibilidad de API
Los usuarios pueden aplicar la cuantificación con las siguientes API:
- Construcción de modelos:
tf.keras
con solo modelos Secuenciales y Funcionales. - Versiones de TensorFlow: TF 2.x para tf-nightly.
-
tf.compat.v1
con un paquete TF 2.X no es compatible.
-
- Modo de ejecución de TensorFlow: ejecución ansiosa
Está en nuestra hoja de ruta agregar soporte en las siguientes áreas:
- Construcción de modelos: aclarar cómo los modelos subclasificados se han limitado o no tienen soporte
- Entrenamiento distribuido:
tf.distribute
Matriz general de apoyo
El soporte está disponible en las siguientes áreas:
- Cobertura del modelo: modelos que usan capas incluidas en la lista de permitidos, BatchNormalization cuando sigue capas Conv2D y DepthwiseConv2D y, en casos limitados,
Concat
. - Aceleración de hardware: nuestros valores predeterminados de API son compatibles con la aceleración en backends EdgeTPU, NNAPI y TFLite, entre otros. Consulte la advertencia en la hoja de ruta.
- Implementación con cuantificación: actualmente solo se admite la cuantificación por eje para capas convolucionales, no la cuantificación por tensor.
Está en nuestra hoja de ruta agregar soporte en las siguientes áreas:
- Cobertura del modelo: ampliada para incluir RNN/LSTM y compatibilidad general con Concat.
- Aceleración de hardware: asegúrese de que el convertidor TFLite pueda producir modelos enteros completos. Vea este número para más detalles.
- Experimente con casos de uso de cuantización:
- Experimente con algoritmos de cuantificación que abarquen capas de Keras o requieran el paso de entrenamiento.
- Estabilizar las API.
Resultados
Clasificación de imágenes con herramientas
Modelo | Precisión Top-1 no cuantificada | Precisión cuantificada de 8 bits |
---|---|---|
MobilenetV1 224 | 71,03% | 71,06% |
Resnet v1 50 | 76,3% | 76,1% |
MobilenetV2 224 | 70,77% | 70,01% |
Los modelos se probaron en Imagenet y se evaluaron tanto en TensorFlow como en TFLite.
Clasificación de imágenes por técnica
Modelo | Precisión Top-1 no cuantificada | Precisión cuantificada de 8 bits |
---|---|---|
Nasnet-Móvil | 74% | 73% |
Resnet-v2 50 | 75,6% | 75% |
Los modelos se probaron en Imagenet y se evaluaron tanto en TensorFlow como en TFLite.
Ejemplos
Además del ejemplo de entrenamiento consciente de la cuantización , consulte los siguientes ejemplos:
- Modelo CNN en la tarea de clasificación de dígitos escritos a mano del MNIST con cuantificación: código
Para obtener información sobre algo similar, consulte el documento Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference paper . En este artículo se introducen algunos conceptos que utiliza esta herramienta. La implementación no es exactamente la misma, y se utilizan conceptos adicionales en esta herramienta (p. ej., cuantificación por eje).