В зависимости от ваших требований (производительность, память и время выполнения) квантование после обучения можно выполнить двумя способами.
Подход № 1: Квантование веса после тренировки (только квантование весов). В этом случае только веса взвешиваются до int8, но активации остаются такими же, как были. Входные и выходные данные логического вывода являются числами с плавающей запятой.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.experimental_new_converter = True
# Post training quantization
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
tflite_quant_model = converter.convert()
tflite_model_quant_file = tflite_models_dir/"lstm_model_quant.tflite"
tflite_model_quant_file.write_bytes(tflite_quant_model)
Подход № 2. Полное целочисленное квантование (Квантование весов и активаций). В этом случае весовые коэффициенты и активации квантовываются в int8. Сначала нам нужно следовать подходу № 1 для квантования веса, а затем реализовать следующий код для выполнения полного целочисленного квантования. Это использует квантованный ввод и вывод, что делает его совместимым с большим количеством ускорителей, таких как Coral Edge TPU. Входные и выходные данные логического вывода являются целыми числами.
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
tflite_model_quant = converter.convert()
tflite_model_quant_file = tflite_models_dir/"lstm_model_quant_io.tflite"
tflite_model_quant_file.write_bytes(tflite_model_quant)
Более подробная информация о квантовании веса здесь , и вы можете найти более подробную информацию о полном целочисленном квантовании здесь .