AI Explanations 用の TensorFlow モデルを保存する

このページでは、TensorFlow 2.x と TensorFlow 1.15 のいずれかを使用している場合に、AI Explanations で使用するために TensorFlow モデルを保存する方法について説明します。

TensorFlow 2

TensorFlow 2.x を使用している場合は、tf.saved_model.save を使用してモデルを保存します。

保存された TensorFlow モデルを最適化する一般的な方法は、ユーザーが署名を提供することです。モデルを保存するときに、入力署名を指定できます。入力署名が 1 つしかない場合、AI Explanations は、tf.saved_model.save のデフォルトの動作に従って、説明リクエストのデフォルトの提供関数を自動的に使用します。詳しくは、TensorFlow におけるサービス署名の指定をご覧ください。

複数の入力署名

モデルに複数の入力署名がある場合、AI Explanations はモデルから予測を取得するときに使用する署名定義を自動的に判断できません。そのため、AI Explanations で使用する署名定義を指定する必要があります。モデルを保存するときに、サービス デフォルト関数の署名を一意のキー xai-model で指定します。

tf.saved_model.save(m, model_dir, signatures={
    'serving_default': serving_fn,
    'xai_model': my_signature_default_fn # Required for AI Explanations
    })

この場合、AI Explanations は xai_model キーで指定されたモデル関数の署名を使用してモデルとやり取りし、説明を生成します。キーの正確な文字列 xai_model を使用してください。詳細について、署名の定義に関するこちらの概要をご覧ください。

前処理関数

前処理関数を使用する場合は、モデルを保存するときに、前処理関数とモデル関数の署名を指定する必要があります。xai_preprocess キーを使用して前処理関数を指定します。

tf.saved_model.save(m, model_dir, signatures={
    'serving_default': serving_fn,
    'xai_preprocess': preprocess_fn, # Required for AI Explanations
    'xai_model': model_fn # Required for AI Explanations
    })

この場合、AI Explanations は、説明リクエストに説明関数と前処理関数を使用します。モデル関数が想定する入力と前処理関数の出力が一致することを確認します。

以下に示す TensorFlow 2 のサンプル ノートブックの例をお試しください。

TensorFlow 1.15

TensorFlow 1.15 を使用している場合は、tf.saved_model.save を使用しないでください。TensorFlow 1 を使用する場合、この機能は AI Explanations ではサポートされていません。代わりに、適切な tf.estimator.export.ServingInputReceiver と組み合わせて tf.estimator.export_savedmodel を使用します。

Keras で構築されたモデル

Keras でモデルを作成してトレーニングする場合は、モデルを TensorFlow Estimator に変換して、SavedModel にエクスポートする必要があります。このセクションでは、モデルの保存を中心に説明します。実際の詳細な例については、サンプル ノートブックをご覧ください。

Keras モデルの構築、コンパイル、トレーニング、評価を行った後に、次のことを行う必要があります。

  • tf.keras.estimator.model_to_estimator を使用して、Keras モデルを TensorFlow Estimator に変換します。
  • tf.estimator.export.build_raw_serving_input_receiver_fn を使用して、サービング入力関数を入力します。
  • tf.estimator.export_saved_model を使用して、SavedModel としてモデルをエクスポートします。
# Build, compile, train, and evaluate your Keras model
model = tf.keras.Sequential(...)
model.compile(...)
model.fit(...)
model.predict(...)

## Convert your Keras model to an Estimator
keras_estimator = tf.keras.estimator.model_to_estimator(keras_model=model, model_dir='export')

## Define a serving input function appropriate for your model
def serving_input_receiver_fn():
  ...
  return tf.estimator.export.ServingInputReceiver(...)

## Export the SavedModel to Cloud Storage using your serving input function
export_path = keras_estimator.export_saved_model(
    'gs://' + 'YOUR_BUCKET_NAME', serving_input_receiver_fn).decode('utf-8')

print("Model exported to: ", export_path)

次のステップ