La cuantificación posterior al entrenamiento incluye técnicas generales para reducir la latencia, el procesamiento, la potencia y el tamaño del modelo del CPU y del acelerador de hardware con poca degradación en la precisión del modelo. Estas técnicas se pueden realizar en un modelo de TensorFlow flotante ya entrenado y se pueden aplicar durante la conversión de TensorFlow Lite. Estas técnicas están habilitadas como opciones en el convertidor TensorFlow Lite .
Para saltar directamente a los ejemplos de un extremo a otro, consulte los siguientes tutoriales:
- Cuantificación del rango dinámico posterior al entrenamiento
- Cuantificación de enteros completos posterior al entrenamiento
- Cuantificación float16 posterior al entrenamiento
Pesos de cuantificación
Los pesos se pueden convertir a tipos con precisión reducida, como flotantes de 16 bits o enteros de 8 bits. Por lo general, recomendamos valores flotantes de 16 bits para la aceleración de la GPU y números enteros de 8 bits para la ejecución de la CPU.
Por ejemplo, aquí se explica cómo especificar la cuantificación del peso de enteros de 8 bits:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = converter.convert()
En la inferencia, las partes más críticas se calculan con 8 bits en lugar de punto flotante. Hay cierta sobrecarga de rendimiento del tiempo de inferencia, en relación con la cuantificación de los pesos y las activaciones a continuación.
Para obtener más información, consulta la guía de cuantificación posterior al entrenamiento de TensorFlow Lite.
Cuantificación entera completa de pesos y activaciones
Mejore la latencia, el procesamiento y el uso de energía, y obtenga acceso a aceleradores de hardware de solo números enteros asegurándose de cuantificar tanto los pesos como las activaciones. Esto requiere un pequeño conjunto de datos representativos.
import tensorflow as tf
def representative_dataset_gen():
for _ in range(num_calibration_steps):
# Get sample input data as a numpy array in a method of your choosing.
yield [input]
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset_gen
tflite_quant_model = converter.convert()
El modelo resultante aún tomará entradas y salidas flotantes por conveniencia.
Para obtener más información, consulta la guía de cuantificación posterior al entrenamiento de TensorFlow Lite.