Skip to main content
您可以将 TensorFlow 模型转换为 LiteRT 格式,并针对端侧推理进行优化。有关 LiteRT 模型转换的更多信息,请参见模型转换概述 LiteRT 模型转换支持以下输出精度:
  • 32 位浮点精度
  • 16 位浮点精度
  • uint8/int8 精度(量化模型)
下表列出了 TensorFlow 框架中可用的转换方法: TensorFlow 模型转换方法 Python API 提供更大的灵活性,可根据您的需求对模型进行转换、优化和量化。

使用 Python API 转换模型

下表列出了 TensorFlow 提供的将 TensorFlow SavedModel 或 Keras 模型转换为 LiteRT 的 Python API: 用于转换模型的 TensorFlow Python API

使用 Python API 转换 TensorFlow SavedModel

以下示例将 SavedModel 格式的 TensorFlow 模型转换为 LiteRT:
转换后的 LiteRT 模型未经过量化,其数据为 32 位浮点精度。

使用 Python API 转换 Keras 模型

以下示例将 Keras 模型转换为 LiteRT:
转换后的 LiteRT 模型未经过量化,其数据为 32 位浮点精度。

量化模型

使用 Python API 将模型转换为 LiteRT 格式后,可以对其进行量化。量化通过将高精度数值(如 32 位浮点数)转换为低精度格式(如 8 位整数)来减小模型的体积和计算需求。 神经网络模型中的量化包含以下步骤:
  1. 量化权重和偏置 — 它们已经是训练好的模型的一部分,无需额外输入数据即可量化。这是一个静态步骤。
  2. 量化激活层 — 激活层输出的范围取决于前向传播期间的输入数据。需要一组样本输入(称为校准数据集或代表性数据集)来确定最小和最大范围。
要将 TensorFlow 浮点模型量化为量化的 LiteRT 模型,LiteRT 提供了训练后量化技术。有关更多信息,请参见训练后量化 LiteRT 支持以下类型的训练后量化:

使用动态范围量化对模型进行量化

在动态范围量化中,权重和偏置从浮点精度静态量化为 8 位整数精度。激活层范围保持为 32 位浮点精度。 为了降低推理期间的延迟,动态范围算子会:
  • 根据激活值的范围将其量化为 8 位整数精度。
  • 使用 8 位权重和激活值执行计算。
此步骤仅量化权重,不需要额外的校准数据。
以下脚本将 TensorFlow 模型转换为 LiteRT 并应用动态范围量化:

使用全整数量化对模型进行量化

在全整数量化中,使用代表性数据集对模型中的激活层进行量化。这会生成更适合定点整数硬件(例如 Qualcomm 开发套件上的 Hexagon 张量处理器)的模型。 以下脚本将 TensorFlow 模型转换并量化为全整数量化的 LiteRT 模型:
转换器中的 supported_opstarget_spec 设置为 tf.lite.OpsSet.TFLITE_BUILTINS_INT8

使用 tflite_convert 命令转换模型

您可以使用 TensorFlow pip 包中包含的 tflite_convert CLI 工具,通过 TensorFlow v2.x 及更高版本进行离线转换。
tflite_convert 命令仅适用于基本转换。对于训练后整数量化,请使用 Python API。
tflite_convert 命令需要 --output_file 标志以及 --saved_model_dir--keras_model_file 之一。运行 tflite_convert --help 可查看完整的选项列表。

转换 SavedModel

要转换 SavedModel 格式的 TensorFlow 模型,请运行:

转换 Keras H5 模型

要转换 Keras H5 模型,请运行: