如何量化优化tflite模型的输入和输出

时间:2019-07-02 15:59:59

标签: python tensorflow-lite google-coral

我使用以下代码生成量化的tflite模型

input_uint8

但是根据post training quantization

  

生成的模型将被完全量化,但为方便起见,仍采用浮动输入和输出

要为 Google Coral Edge TPU 编译tflite模型,我还需要量化的输入和输出。

在模型中,我看到第一网络层将浮点输入转换为output_uint8,最后一层将{{1}}转换为浮点输出。 如何编辑tflite模型以摆脱第一个和最后一个浮动图层?

我知道我可以在转换期间将输入和输出类型设置为uint8,但这与任何优化都不兼容。然后,唯一可用的选择是使用虚假量化,从而导致模型错误。

2 个答案:

答案 0 :(得分:1)

通过将inference_input_type和inference_output_type(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/python/lite.py#L460-L476)设置为int8,可以避免对int8进行浮点运算以及对int8进行“量化/等价”运算浮点运算。

答案 1 :(得分:0)

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir
converter.optimizations = [tf.lite.Optimize.DEFAULT] 
converter.representative_dataset = representative_dataset
#The below 3 lines performs the input - output quantization
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 = converter.convert()