常见问题解答

如果您在此处没有找到问题的答案,请查看我们有关该主题的详细文档,或提交 GitHub 问题

模型转换

从 TensorFlow 转换为 TensorFlow Lite 支持哪些格式?

支持的格式列在 此处

为什么 TensorFlow Lite 中未实现某些操作?

为了使 TFLite 保持轻量级,TFLite 中只支持某些 TF 操作符(列在 允许列表 中)。

为什么我的模型无法转换?

由于 TensorFlow Lite 操作的数量少于 TensorFlow,因此某些模型可能无法转换。一些常见错误列在 此处

对于与缺少操作或控制流操作无关的转换问题,请搜索我们的 GitHub 问题 或提交 新问题

如何测试 TensorFlow Lite 模型的行为是否与原始 TensorFlow 模型相同?

最好的测试方法是比较 TensorFlow 和 TensorFlow Lite 模型在相同输入(测试数据或随机输入)下的输出,如 此处 所示。

如何确定 GraphDef 协议缓冲区的输入/输出?

检查来自 .pb 文件的图形的最简单方法是使用 Netron,这是一个用于机器学习模型的开源查看器。

如果 Netron 无法打开图形,您可以尝试使用 summarize_graph 工具。

如果 summarize_graph 工具出现错误,您可以使用 TensorBoard 可视化 GraphDef,并在图形中查找输入和输出。要可视化 .pb 文件,请使用 import_pb_to_tensorboard.py 脚本,如下所示

python import_pb_to_tensorboard.py --model_dir <model path> --log_dir <log dir path>

如何检查 .tflite 文件?

Netron 是可视化 TensorFlow Lite 模型的最简单方法。

如果 Netron 无法打开您的 TensorFlow Lite 模型,您可以尝试使用我们存储库中的 visualize.py 脚本。

如果您使用的是 TF 2.5 或更高版本

python -m tensorflow.lite.tools.visualize model.tflite visualized_model.html

否则,您可以使用 Bazel 运行此脚本

bazel run //tensorflow/lite/tools:visualize model.tflite visualized_model.html

优化

如何减小转换后的 TensorFlow Lite 模型的大小?

训练后量化 可在转换为 TensorFlow Lite 期间使用,以减小模型的大小。训练后量化将权重从浮点量化为 8 位精度,并在运行时对其进行反量化以执行浮点计算。但是,请注意,这可能会对精度产生一些影响。

如果可以重新训练模型,请考虑使用 量化感知训练。但是,请注意,量化感知训练仅适用于卷积神经网络架构的子集。

要深入了解不同的优化方法,请查看 模型优化

如何优化 TensorFlow Lite 以提升机器学习任务的性能?

优化 TensorFlow Lite 性能的整体流程如下:

  • 确保你选择了适合任务的模型。 对于图像分类,请查看 TensorFlow Hub
  • 调整线程数量。 许多 TensorFlow Lite 运算符支持多线程内核。你可以使用 SetNumThreads()C++ API 中进行操作。但是,增加线程会导致性能波动,具体取决于环境。
  • 使用硬件加速器。 TensorFlow Lite 支持使用委托对特定硬件进行模型加速。有关支持的加速器以及如何在设备上使用它们与模型的更多信息,请参阅我们的 委托 指南。
  • (高级)模型分析。 TensorFlow Lite 基准测试工具 内置了分析器,可以显示每个运算符的统计信息。如果你知道如何优化特定平台上的运算符性能,可以实现一个 自定义运算符

有关如何优化性能的更深入讨论,请查看 最佳实践