TensorFlow Lite Model Analyzer

TensorFlow.org で表示 Google Colab で実行 GitHubでソースを表示 ノートブックをダウンロード

TensorFlow Lite Model Analyzer API を使用すると、モデルの構造をリスト出力することで、TensorFlow Lite 形式でモデルを分析できます。

Model Analyzer API

次の API は TensorFlow Lite Model Analyzer で使用できます。

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

API の詳細については、https://www.tensorflow.org/api_docs/python/tf/lite/experimental/Analyzer をご覧ください。Python ターミナルから help(tf.lite.experimental.Analyzer.analyze) を実行することもできます。

シンプルな Keras モデルを利用した基本的な使用方法

次のコードでは Model Analyzer の基本的な使用方法を示します。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: モデルの互換性がないとき

次のコードでは、シンプルな tf.function で gpu_compatibility=True オプションを使用する方法を示します。ここでは、2D テンソルの tf.slice と、GPU デリゲートに対応していない tf.cosh が使用されています。

互換性の問題が生じているすべてのノードで 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)

事例 1: モデルの互換性があるとき

この例では、特定のモデルが GPU デリゲートに対応しています。

注意: ツールでは互換性の問題が検出されませんが、モデルがすべてのデバイスで GPU デリゲートに対応することは保証されません。このため、ターゲット OpenGL バックエンドで CL_DEVICE_IMAGE_SUPPORT 機能が見つからないといった、何らかのランタイム非互換性の問題が発生する可能性があります。

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)