我使用以下代码生成量化的tflite模型
input_uint8
但是根据post training quantization:
生成的模型将被完全量化,但为方便起见,仍采用浮动输入和输出。
要为 Google Coral Edge TPU 编译tflite模型,我还需要量化的输入和输出。
在模型中,我看到第一网络层将浮点输入转换为output_uint8
,最后一层将{{1}}转换为浮点输出。
如何编辑tflite模型以摆脱第一个和最后一个浮动图层?
我知道我可以在转换期间将输入和输出类型设置为uint8,但这与任何优化都不兼容。然后,唯一可用的选择是使用虚假量化,从而导致模型错误。
答案 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()