Path: blob/master/site/es-419/lite/performance/post_training_quant.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
Cuantización del rango dinámico postentrenamiento
Visión general
TensorFlow Lite soporta ahora la conversión de las ponderaciones a una precisión de 8 bits como parte de la conversión del modelo desde graphdefs de tensorflow al formato flatbuffer de TensorFlow Lite. La cuantización del rango dinámico consigue una reducción de 4x del tamaño del modelo. Además, TFLite soporta la cuantización y decuantización sobre la marcha de las activaciones para permitir:
Usar kernels cuantizados para una implementación más rápida cuando estén disponibles.
Mezcla de kernels de punto flotante con kernels cuantizados para diferentes partes del grafo.
Las activaciones se almacenan siempre en punto flotante. Para las ops que admiten kernels cuantizados, las activaciones se cuantizan a 8 bits de precisión dinámicamente antes del procesamiento y se descuantizan a precisión flotante después del procesamiento. Dependiendo del modelo que se esté convirtiendo, esto puede suponer un aumento de la velocidad con respecto al cálculo en punto flotante puro.
En contraste con el entrenamiento consciente de la cuantización en este método, las ponderaciones se cuantizan tras el entrenamiento y las activaciones se cuantizan dinámicamente en el momento de la inferencia. Por lo tanto, las ponderaciones del modelo no se vuelven a entrenar para compensar los errores inducidos por la cuantización. Es importante revisar la precisión del modelo cuantizado para asegurarse de que la degradación es aceptable.
Este tutorial entrena un modelo MNIST desde cero, revisa su precisión en TensorFlow y, a continuación, convierte el modelo en un flatbuffer de Tensorflow Lite con cuantización de rango dinámico. Por último, revisa la precisión del modelo convertido y lo compara con el modelo flotante original.
Generar un modelo MNIST
Prepararación
Entrenar un modelo TensorFlow
En el caso del ejemplo, como ha entrenado el modelo durante una sola época, sólo alcanza una precisión del 96%.
Convertir a un modelo TensorFlow Lite
Usando el Convertidor de TensorFlow Lite, ahora puede convertir el modelo entrenado en un modelo TensorFlow Lite.
Ahora cargue el modelo usando el TFLiteConverter
:
Escríbalo en un archivo tflite:
Para cuantizar el modelo en la exportación, configure el indicador optimizations
para que optimice el tamaño:
Observe cómo el archivo resultante, tiene aproximadamente 1/4
del tamaño.
Ejecutar los modelos TFLite
Ejecute el modelo TensorFlow Lite usando el intérprete TensorFlow Lite de Python.
Cargar el modelo con un intérprete
Probar el modelo en una imagen
Evaluar los modelos
Repita la evaluación en el modelo cuantizado de rango dinámico para obtener:
En este ejemplo, el modelo comprimido no tiene ninguna diferencia en la precisión.
Optimizar un modelo existente
Las resnets con capas de preactivación (Resnet-v2) se usan ampliamente para aplicaciones de visión. El grafo congelado preentrenado para resnet-v2-101 está disponible en Tensorflow Hub.
Puede convertir el grafo congelado en un flatbuffer TensorFLow Lite con cuantización mediante:
El tamaño del modelo se reduce de 171 MB a 43 MB. La precisión de este modelo en imagenet puede evaluarse usando los scripts proporcionados para Medir la precisión de TFLite.
La precisión top-1 del modelo optimizado es de 76.8, la misma que la del modelo de punto flotante.