ML Community Day is November 9! Join us for updates from TensorFlow, JAX, and more Learn more

TensorFlow Lite 转换器

TensorFlow Lite 转换器可根据输入的 TensorFlow 模型生成 TensorFlow Lite 模型(一种优化的 FlatBuffer 格式,以 .tflite 为文件扩展名)。您可以通过以下两种方式使用此转换器:

  1. Python API推荐):它让您可以更轻松地在模型开发流水线中转换模型、应用优化、添加元数据,并且拥有更多功能。
  2. 命令行:它仅支持基本模型转换。

TFLite 转换器工作流程

Python API

辅助程序代码:若要确定已安装的 TensorFlow 版本,请运行 print(tf.__version__);若要详细了解 TensorFlow Lite converter API,请运行 print(help(tf.lite.TFLiteConverter))

如果您已安装 TensorFlow 2.x,会有以下两个选项:(如果您已安装 TensorFlow 1.x,请参阅 GitHub

以下示例演示了如何将 SavedModel 转换为 TensorFlow Lite 模型。

import tensorflow as tf

# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # path to the SavedModel directory
tflite_model = converter.convert()

# Save the model.
with open('model.tflite', 'wb') as f:
  f.write(tflite_model)

转换 Keras 模型

以下示例演示了如何将 Keras 模型转换为 TensorFlow Lite 模型。

import tensorflow as tf

# Create a model using high-level tf.keras.* APIs
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[1]),
    tf.keras.layers.Dense(units=16, activation='relu'),
    tf.keras.layers.Dense(units=1)
])
model.compile(optimizer='sgd', loss='mean_squared_error') # compile the model
model.fit(x=[-1, 0, 1], y=[-3, -1, 1], epochs=5) # train the model
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_keras_dir")

# Convert the model.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

# Save the model.
with open('model.tflite', 'wb') as f:
  f.write(tflite_model)

转换具体函数

以下示例演示了如何将具体函数转换为 TensorFlow Lite 模型。

import tensorflow as tf

# Create a model using low-level tf.* APIs
class Squared(tf.Module):
  @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)])
  def __call__(self, x):
    return tf.square(x)
model = Squared()
# (ro run your model) result = Squared(5.0) # This prints "25.0"
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_tf_dir")
concrete_func = model.__call__.get_concrete_function()

# Convert the model.
# Notes that for the versions earlier than TensorFlow 2.7, the
# from_concrete_functions API is able to work when there is only the first
# argument given:
# > converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func],
                                                            model)
tflite_model = converter.convert()

# Save the model.
with open('model.tflite', 'wb') as f:
  f.write(tflite_model)

其他功能

  • 应用优化。一种常用的优化是训练后量化,它可以进一步缩短模型延迟时间和减小模型大小,同时最大限度降低准确率损失。

  • 添加元数据,从而在设备上部署模型时可以更轻松地创建平台专用封装容器代码。

转换错误

下面是常见的转换错误及其解决方案:

  • 错误:Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...

    解决方案:之所以出现该错误,是因为模型包含缺少对应的 TFLite 实现的 TF 操作。若要解决该错误,您可以使用 TFLite 模型中的 TF 操作(推荐)。 如果您想生成一个仅包含 TFLite 操作的模型,您可以在 GitHub 问题 21526 中针对缺失的 TFLite 操作添加请求(如果未提及您的请求,请发表评论),也可以自行创建 TFLite 操作

  • 错误:.. is neither a custom op nor a flex op

    解决方案:如果该 TF 操作符合以下条件:

命令行工具

强烈建议您尽可能使用上文列出的 Python API

如果您已通过 pip 安装了 TensorFlow 2.x,请按下文所示使用 tflite_convert 命令:(如果您已从源代码安装了 TensorFlow 2.x,可以在接下来的几节中将“tflite_convert”替换为“bazel run //tensorflow/lite/python:tflite_convert --”;如果您已安装了 TensorFlow 1.x,请参阅 GitHub [参考文档示例])

tflite_convert - 若要查看所有可用标记,请使用以下命令:

$ tflite_convert --help

`--output_file`. Type: string. Full path of the output file.
`--saved_model_dir`. Type: string. Full path to the SavedModel directory.
`--keras_model_file`. Type: string. Full path to the Keras H5 model file.
`--enable_v1_converter`. Type: bool. (default False) Enables the converter and flags used in TF 1.x instead of TF 2.x.

You are required to provide the `--output_file` flag and either the `--saved_model_dir` or `--keras_model_file` flag.

转换 SavedModel

tflite_convert \
  --saved_model_dir=/tmp/mobilenet_saved_model \
  --output_file=/tmp/mobilenet.tflite

转换 Keras H5 模型

tflite_convert \
  --keras_model_file=/tmp/mobilenet_keras_model.h5 \
  --output_file=/tmp/mobilenet.tflite

后续步骤

使用 TensorFlow Lite 解释器在客户端设备(例如移动设备、嵌入式设备)上运行推断。