量化感知训练

由 TensorFlow 模型优化维护

量化有两种形式:训练后量化和量化感知训练。从 训练后量化 开始,因为它更易于使用,尽管量化感知训练通常对模型准确性更好。

此页面提供了量化感知训练的概述,以帮助您确定它如何适合您的用例。

概览

量化感知训练模拟推理时量化,创建下游工具将使用该模型生成实际量化模型。量化模型使用较低精度(例如 8 位而不是 32 位浮点数),从而在部署期间带来好处。

使用量化进行部署

量化通过模型压缩和延迟减少带来了改进。使用 API 默认值,模型大小缩小了 4 倍,并且我们在已测试的后端通常看到 CPU 延迟提高了 1.5 - 4 倍。最终,可以在兼容的机器学习加速器(例如 EdgeTPU 和 NNAPI)上看到延迟改进。

该技术用于语音、视觉、文本和翻译用例的生产中。该代码目前支持 这些模型的子集

尝试量化和相关硬件

用户可以配置量化参数(例如位数),并且在一定程度上可以配置底层算法。请注意,对于 API 默认值进行这些更改后,目前不支持部署到后端。例如,TFLite 转换和内核实现仅支持 8 位量化。

针对此配置的 API 为实验性 API,不受向后兼容性的约束。

API 兼容性

用户可以使用以下 API 应用量化

  • 模型构建:仅使用 Sequential 和 Functional 模型的 keras
  • TensorFlow 版本:tf-nightly 的 TF 2.x。
  • TensorFlow 执行模式:急切执行

我们的路线图中包括在以下领域添加支持

  • 模型构建:阐明子类模型的支持受限或不受支持
  • 分布式训练: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 模型:代码

有关类似内容的背景信息,请参阅用于高效仅整数算术推理的神经网络的量化和训练 论文。本文介绍了此工具使用的一些概念。实现并不完全相同,并且此工具中使用了其他概念(例如,逐轴量化)。