TensorFlow Lite 模型分析器

在 TensorFlow.org 上查看 在 Google Colab 中运行 在 GitHub 上查看源代码 下载笔记本

TensorFlow Lite 模型分析器 API 可帮助您通过列出模型的结构来分析 TensorFlow Lite 格式的模型。

模型分析器 API

TensorFlow Lite 模型分析器提供以下 API。

tf.lite.experimental.Analyzer.analyze(model_path=None,
                                      model_content=None,
                                      gpu_compatibility=False)

您可以从 https://tensorflowcn.cn/api_docs/python/tf/lite/experimental/Analyzer 找到 API 详细信息,或从 Python 终端运行 help(tf.lite.experimental.Analyzer.analyze)

使用简单 Keras 模型的基本用法

以下代码展示了模型分析器的基本用法。它显示了 TFLite 模型内容中转换后的 Keras 模型的内容,格式化为一个 flatbuffer 对象。

import tensorflow as tf

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(128, 128)),
  tf.keras.layers.Dense(256, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

fb_model = tf.lite.TFLiteConverter.from_keras_model(model).convert()

tf.lite.experimental.Analyzer.analyze(model_content=fb_model)

使用 MobileNetV3Large Keras 模型的基本用法

此 API 可与 MobileNetV3Large 等大型模型一起使用。由于输出很大,您可能希望使用您喜欢的文本编辑器浏览它。

model = tf.keras.applications.MobileNetV3Large()
fb_model = tf.lite.TFLiteConverter.from_keras_model(model).convert()

tf.lite.experimental.Analyzer.analyze(model_content=fb_model)

检查 GPU 代理兼容性

ModelAnalyzer API 提供了一种方法,可以通过提供 gpu_compatibility=True 选项来检查给定模型的 GPU 代理 兼容性。

情况 1:模型不兼容

以下代码展示了如何使用 gpu_compatibility=True 选项来处理使用 tf.slice(使用二维张量)和 tf.cosh(与 GPU 代理不兼容)的简单 tf.function。

您将看到每个具有兼容性问题(或问题)的节点的 GPU COMPATIBILITY WARNING

import tensorflow as tf

@tf.function(input_signature=[
    tf.TensorSpec(shape=[4, 4], dtype=tf.float32)
])
def func(x):
  return tf.cosh(x) + tf.slice(x, [1, 1], [1, 1])

converter = tf.lite.TFLiteConverter.from_concrete_functions(
    [func.get_concrete_function()], func)
converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS,
    tf.lite.OpsSet.SELECT_TF_OPS,
]
fb_model = converter.convert()

tf.lite.experimental.Analyzer.analyze(model_content=fb_model, gpu_compatibility=True)

情况 2:模型兼容

在此示例中,给定模型与 GPU 代理兼容。

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(128, 128)),
  tf.keras.layers.Dense(256, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

fb_model = tf.lite.TFLiteConverter.from_keras_model(model).convert()

tf.lite.experimental.Analyzer.analyze(model_content=fb_model, gpu_compatibility=True)