Tensorflow Lite从入门到精通( 七 )

仅整数:具有 8 位权重的 16 位激活(实验性)
这是一个实验性量化方案 。它与“仅整数”方案类似 , 但会根据激活的范围将其量化为 16 位,权重会被量化为 8 位整数,偏差会被量化为 64 位整数 。这被进一步称为 16x8 量化 。
这种量化的主要优点是可以显著提高准确率 , 但只会稍微增加模型大小 。
import tensorflow as tfconverter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)converter.representative_dataset = representative_datasetconverter.optimizations = [tf.lite.Optimize.DEFAULT]converter.target_spec.supported_ops = [tf.lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8]tflite_quant_model = converter.convert()如果模型中的部分算子不支持 16x8 量化,模型仍然可以量化,但不受支持的算子会保留为浮点 。要允许此操作,应将以下选项添加到 target_spec 中 。
import tensorflow as tfconverter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)converter.representative_dataset = representative_datasetconverter.optimizations = [tf.lite.Optimize.DEFAULT]converter.target_spec.supported_ops = [tf.lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8,                                       tf.lite.OpsSet.TFLITE_BUILTINS]tflite_quant_model = converter.convert()这种量化的缺点是:

  • 由于缺少优化的内核实现,目前的推断速度明显比 8 位全整数慢 。
  • 目前它不兼容现有的硬件加速 TFLite 委托 。
注:这是一项实验性功能 。
可以在此处找到该量化模型的教程 。
模型准确率
由于权重是在训练后量化的,因此可能会造成准确率损失 , 对于较小的网络尤其如此 。TensorFlow Hub 为特定网络提供了预训练的完全量化模型 。请务必检查量化模型的准确率,以验证准确率的任何下降都在可接受的范围内 。有一些工具可以评估 TensorFlow Lite 模型准确率 。
另外,如果准确率下降过多,请考虑使用量化感知训练 。但是,这样做需要在模型训练期间进行修改以添加伪量化节点,而此页面上的训练后量化技术使用的是现有的预训练模型 。
参考【TensorFlow官方】TensorFlow Lite 指南

推荐阅读