Path: blob/master/site/zh-cn/lite/performance/post_training_quant.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
训练后动态范围量化
概述
TensorFlow Lite 现在支持将权重转换为 8 位精度,作为从 TensorFlow GraphDef 到 TensorFlow Lite FlatBuffer 格式的模型转换的一部分。动态范围量化能使模型大小缩减至原来的四分之一。此外,TFLite 支持对激活进行实时量化和反量化以实现以下效果:
在可用时使用量化内核加快实现速度。
将计算图不同部分的浮点内核与量化内核混合。
激活始终以浮点进行存储。对于支持量化内核的算子,激活会在处理前动态量化为 8 位精度,并在处理后反量化为浮点精度。根据被转换的模型,这可以提供比纯浮点计算更快的速度。
与量化感知训练相比,在此方法中,权重会在训练后量化,激活会在推断时动态量化。因此,不会重新训练模型权重以补偿量化引起的误差。请务必检查量化模型的准确率,以确保下降程度可以接受。
本教程将从头开始训练一个 MNIST 模型,在 TensorFlow 中检查其准确率,然后使用动态范围量化将此模型转换为 Tensorflow Lite FlatBuffer 格式。最后,检查转换后模型的准确率,并将其与原始浮点模型进行比较。
构建 MNIST 模型
设置
训练 TensorFlow 模型
在此示例中,由于您只对模型进行了一个周期的训练,因此只训练到约 96% 的准确率。
转换为 TensorFlow Lite 模型
现在,您可以使用 TensorFlow Lite Converter 将训练后的模型转换为 TensorFlow Lite 模型。
现在使用 TFLiteConverter
加载模型:
将其写入 TFLite 文件:
要在导出时量化模型,请设置 optimizations
标记以优化大小:
请注意,生成文件的大小约为 1/4
。
运行 TFLite 模型
使用 Python TensorFlow Lite 解释器运行 TensorFlow Lite 模型。
将模型加载到解释器中
在单个图像上测试模型
评估模型
在动态范围量化模型上重复评估,以获得如下结果:
在此示例中,压缩后的模型在准确率方面没有差别。
优化现有模型
带有预激活层的 ResNet (ResNet-v2) 被广泛用于视觉应用。用于 ResNet-v2-101 的预训练冻结计算图可在 Tensorflow Hub 上获得。
您可以通过执行以下代码,使用量化将冻结计算图转换为 TensorFLow Lite FlatBuffer 格式:
模型大小从 171 MB 减小到 43 MB。可以使用为 TFLite 准确率测量提供的脚本来评估此模型在 ImageNet 上的准确率。
优化后模型的 Top-1 准确率为 76.8,与浮点模型相同。