模型转换概述

您在 TensorFlow Lite 中使用的机器学习 (ML) 模型最初是使用 TensorFlow 核心库和工具构建和训练的。在使用 TensorFlow 核心构建模型后,您可以将其转换为一种称为 TensorFlow Lite 模型的更小、更高效的 ML 模型格式。本节提供有关将 TensorFlow 模型转换为 TensorFlow Lite 模型格式的指南。

转换工作流程

将 TensorFlow 模型转换为 TensorFlow Lite 格式可以采用几种路径,具体取决于您的 ML 模型的内容。作为该过程的第一步,您应该评估您的模型以确定它是否可以被直接转换。此评估将确定模型的内容是否由基于 TensorFlow 运算符的标准 TensorFlow Lite 运行时环境支持。如果您的模型使用超出支持集的运算符,您可以选择重构模型或使用高级转换技术。

下图显示了转换模型的高级步骤。

TFLite conversion workflow

图 1. TensorFlow Lite 转换工作流程。

以下部分概述了评估和转换模型以供 TensorFlow Lite 使用的过程。

输入模型格式

您可以将转换器与以下输入模型格式一起使用

您可以将 Keras 和具体函数模型都保存为 SavedModel,并使用推荐的路径进行转换。

如果您有 Jax 模型,可以使用 TFLiteConverter.experimental_from_jax API 将其转换为 TensorFlow Lite 格式。请注意,此 API 在实验模式下可能会发生变化。

转换评估

在尝试转换模型之前,评估模型是一个重要的步骤。评估时,您需要确定模型的内容是否与 TensorFlow Lite 格式兼容。您还应该确定模型在数据大小、硬件处理要求以及模型的整体大小和复杂性方面是否适合在移动设备和边缘设备上使用。

对于许多模型,转换器应该能够开箱即用。但是,TensorFlow Lite 内置算子库支持 TensorFlow 核心算子的一个子集,这意味着某些模型可能需要在转换为 TensorFlow Lite 之前进行额外的步骤。此外,出于性能原因,TensorFlow Lite 支持的一些操作对使用有严格的要求。请参阅 算子兼容性 指南,以确定您的模型是否需要重构才能进行转换。

模型转换

TensorFlow Lite 转换器接受 TensorFlow 模型并生成 TensorFlow Lite 模型(一种经过优化的 FlatBuffer 格式,由 .tflite 文件扩展名标识)。您可以加载 SavedModel 或直接转换您在代码中创建的模型。

转换器接受 3 个主要标志(或选项),用于自定义模型的转换

  1. 兼容性标志 允许您指定转换是否应该允许自定义算子。
  2. 优化标志 允许您指定在转换期间要应用的优化类型。最常用的优化技术是 训练后量化
  3. 元数据标志 允许您向转换后的模型添加元数据,这使得在设备上部署模型时更容易创建特定于平台的包装代码。

您可以使用 Python API命令行 工具来转换您的模型。请参阅 转换 TF 模型 指南,了解在模型上运行转换器的分步说明。

通常,您会为标准 TensorFlow Lite 运行时环境Google Play 服务运行时环境(适用于 TensorFlow Lite(Beta))转换您的模型。一些高级用例需要自定义模型运行时环境,这需要在转换过程中进行额外的步骤。请参阅 Android 概述的 高级运行时环境 部分,以获取更多指导。

高级转换

如果您在模型上运行转换器时遇到 错误,则很可能是您遇到了算子兼容性问题。并非所有 TensorFlow 操作都受 TensorFlow Lite 支持。您可以通过重构模型或使用允许您创建修改后的 TensorFlow Lite 格式模型和该模型的自定义运行时环境的高级转换选项来解决这些问题。

  • 请参阅 模型兼容性概述,以获取有关 TensorFlow 和 TensorFlow Lite 模型兼容性注意事项的更多信息。
  • 模型兼容性概述下的主题涵盖了重构模型的高级技术,例如 选择算子 指南。
  • 有关操作和限制的完整列表,请参阅 TensorFlow Lite Ops 页面

下一步

  • 请参阅 转换 TF 模型 指南,以快速开始转换您的模型。
  • 请参阅 优化概述,以获取有关如何使用 训练后量化 等技术优化转换后的模型的指导。
  • 请参阅 添加元数据概述,了解如何向模型添加元数据。元数据为其他用途提供了模型的描述以及代码生成器可以利用的信息。