由 TensorFlow Model Optimization 维护
有两种形式的量化:训练后量化和量化感知训练。请从训练后量化开始,因为它更易于使用,尽管量化感知训练在模型准确率方面的表现通常更好。
本页面概述了量化感知训练,旨在帮助您确定它与您的用例的契合程度。
- 要查看端到端示例,请参阅量化感知训练示例。
- 要快速找到您的用例所需的 API,请参阅量化感知训练综合指南。
概述
量化感知训练可以模拟推理时间量化,同时创建一个模型,下游工具将使用该模型生成实际量化模型。量化模型使用较低的精度(例如 8 位而不是 32 位浮点数),这样可在部署期间带来诸多好处。
使用量化部署
量化通过压缩模型和减少延迟带来了诸多改进。使用 API 默认值时,模型大小可缩减至原来的四分之一,我们通常会在测试的后端中看到 CPU 延迟缩短为原来的三分之二到四分之一。最终,可以在兼容的机器学习加速器(例如 EdgeTPU 和 NNAPI)上看到延迟方面的改善。
这种技术用于语音、视觉、文本和翻译用例的生产中。代码目前支持其中一部分模型。
试验量化和相关硬件
用户可以配置量化参数(例如位数),并在一定程度上配置底层算法。对 API 默认值进行这些更改后,将没有支持的部署路径。
特定于此配置的 API 是实验性的,不具备向后兼容性。
API 兼容性
用户可以使用以下 API 应用量化:
- 模型构建:仅包含序贯模型和函数式模型的
tf.keras
。 - TensorFlow 版本:TF 2.x Nightly 版本。
- 不支持包含 TF 2.X 软件包的
tf.compat.v1
。
- 不支持包含 TF 2.X 软件包的
- TensorFlow 执行模式:Eager Execution
根据我们的路线图,将在以下方面增加支持:
- 模型构建:阐明子类化模型是如何被限制为不支持的
- 分布式训练:
tf.distribute
一般支持矩阵
在以下方面提供支持:
- 模型覆盖:使用白名单层的模型,遵循 Conv2D 和 DepthwiseConv2D 层时的 BatchNormalization,以及少数情况下的
Concat
。 - 硬件加速:我们的 API 默认值兼容 EdgeTPU、NNAPI 和 TFLite 后端等设备上的加速。请参阅路线图中的注意事项。
- 使用量化部署:目前仅支持卷积层的按轴量化,不支持按张量量化。
根据我们的路线图,将在以下方面增加支持:
- 模型覆盖:扩展到包括 RNN/LSTM 和一般的 Concat 支持。
- 硬件加速:确保 TFLite 转换器可以产生全整数模型。有关详细信息,请参阅此问题。
- 试验量化用例:
- 试验跨越 Keras 层或需要训练步骤的量化算法。
- 使 API 稳定。
结果
使用工具进行图像分类
模型 | 非量化的 Top-1 准确率 | 8 位量化准确率 |
---|---|---|
MobilenetV1 224 | 71.03% | 71.06% |
Resnet v1 50 | 76.3% | 76.1% |
MobilenetV2 224 | 70.77% | 70.01% |
模型基于 Imagenet 进行测试,并在 TensorFlow 和 TFLite 中进行评估。
技术的图像分类
模型 | 非量化的 Top-1 准确率 | 8 位量化准确率 |
---|---|---|
Nasnet-Mobile | 74% | 73% |
Resnet-v2 50 | 75.6% | 75% |
模型基于 Imagenet 进行测试,并在 TensorFlow 和 TFLite 中进行评估。
示例
除了量化感知训练示例外,另请参阅以下示例:
- 基于使用量化的 MNIST 手写数字分类任务的 CNN 模型:代码
有关类似内容的背景信息,请参阅论文 Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference。这篇论文介绍了此工具使用的一些概念。实现并不完全相同,而且此工具中还使用了其他概念(例如按轴量化)。