モデルをデプロイする際は、説明メタデータ ファイルを送信して説明リクエストを構成する必要があります。説明リクエストのための機能を選択するには、このメタデータ ファイルにモデルの入出力が含まれている必要があります。必要に応じて、入力ベースラインを組み込んで、画像データの可視化設定を構成することもできます。
このガイドでは、TensorFlow 2.x または TensorFlow 1.15 で新しいモデルを構築する場合に、または既存の TensorFlow 2.x モデルを使用する場合に、Explainable AI SDK を使用して説明メタデータ ファイルを作成する方法について説明します。既存の TensorFlow 1.x モデルの説明をリクエストするには、説明メタデータ ファイルを手動で作成する必要があります。
説明メタデータの概要
AI Explanations でモデルをデプロイするには、説明メタデータ ファイルが必要です。モデルの入力と出力を指定すると、説明リクエストで特定の特徴を選択できるようになります。explanation_metadata.json
という名前のファイルを作成し、SavedModel と同じディレクトリで Cloud Storage バケットにアップロードします。Explainable AI SDK が、モデルの構築と保存中にこのプロセスを処理します。
説明メタデータ ファイルに以下のオプションの設定を追加することもできます。
- 画像データの結果の表示方法を構成する。
- 説明リクエストに入力ベースラインを設定する。
説明メタデータ ファイルの詳細については、API リファレンスをご覧ください。
Explainable AI SDK のインストール
Explainable AI SDK は、以下を使用して構築されたモデルをサポートする Python SDK です。
- TensorFlow 1.15 と TensorFlow 2.x
- Python 3.7 以降
Explainable AI SDK をインストールするには:
pip3 install explainable_ai_sdk
Explainable AI SDK で入出力を調べる
Explainable AI SDK は、TensorFlow モデルを構築またはトレーニングするときに、入出力を調べるのに役立ちます。いずれの場合も、モデルを構築した直後に、説明メタデータ ファイルを構築します。Keras モデルと Estimator モデルの場合、Explainable AI SDK はモデルグラフから入力と出力を推測します。
メタデータ ファイルを保存する前に、Explainable AI SDK によって生成される入力値と出力値を更新し、入力ベースラインや可視化の設定などの追加フィールドを追加できます。
TensorFlow 2.x 用の Explainable AI SDK 例
SavedModelMetadataBuilder
は、TensorFlow 2.x を使用して構築されたすべての SavedModel で機能します。この例では、Explainable AI SDK が説明メタデータ ファイルを作成して、モデルと同じ Cloud Storage バケット ディレクトリにアップロードしています。
from explainable_ai_sdk.metadata.tf.v2 import SavedModelMetadataBuilder
builder = SavedModelMetadataBuilder(
model_path)
builder.save_model_with_metadata('gs://my_bucket/model') # Save the model and the metadata.
必要に応じて、get_metadata()
関数を使用して、保存およびアップロードする前に生成されたメタデータを確認できます。
TensorFlow 関数を使用してモデルを保存し、アップロードする場合は、save_metadata()
を使用して説明メタデータだけを作成およびエクスポートできます。
from explainable_ai_sdk.metadata.tf.v2 import SavedModelMetadataBuilder
# We want to explain 'xai_model' signature.
builder = SavedModelMetadataBuilder(export_path, signature_name='xai_model')
random_baseline = np.random.rand(192, 192, 3)
builder.set_image_metadata(
'numpy_inputs',
input_baselines=[random_baseline.tolist()])
builder.save_metadata(export_path)
この例は、ランダムノイズをベースラインとして使用して、画像データの入力ベースラインを設定する方法も示しています。データセットに最も適した入力ベースラインを使用します。出発点として、AI Explanations の例のベースラインをご覧ください。メタデータを更新してフィールドを追加するには、データ型に一致するセッター関数(set_numeric_metadata()
、set_categorical_metadata()
、set_image_metadata()
)を使用します。
TensorFlow 1.15 用の Explainable AI SDK 例
Explainable AI SDK は、tf.keras
、tf.estimator
、tf.Graph
で構築された TensorFlow 1.15 モデルをサポートしています。
Keras
Explainable AI SDK は、Sequence API と Functional API を使用して構築された Keras モデルと、Model
クラスをサブクラス化して構築されたカスタムモデルをサポートしています。詳細については、さまざまな種類の Keras モデルをご覧ください。
import tensorflow.compat.v1.keras as keras
from explainable_ai_sdk.metadata.tf.v1 import KerasGraphMetadataBuilder
# Build a model.
model = keras.models.Sequential()
model.add(keras.layers.Dense(32, activation='relu', input_dim=10))
model.add(keras.layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', metrics=['accuracy'])
model.fit(
np.random.random((1, 10)),
np.random.randint(2, size=(1, 1)),
epochs=10,
batch_size=32)
# Set the path to your model.
model_path = MODEL_PATH
# Build the metadata.
builder = KerasGraphMetadataBuilder(model)
builder.save_model_with_metadata(model_path)
モデルを構築したら、メタデータ ビルダーを使用して入力と出力を取得します。
Estimator
Explainable AI SDK は Estimator モデルをサポートしています。メタデータ ビルダーでは、入力特徴列、サービス入力関数、出力キーを指定します。
import tensorflow.compat.v1 as tf
from explainable_ai_sdk.metadata.tf.v1 import EstimatorMetadataBuilder
# Build a model.
language = tf.feature_column.categorical_column_with_vocabulary_list(
key='language',
vocabulary_list=('english', 'korean'),
num_oov_buckets=1)
language_indicator = tf.feature_column.indicator_column(language)
class_identity = tf.feature_column.categorical_column_with_identity(
key='class_identity', num_buckets=4)
class_id_indicator = tf.feature_column.indicator_column(class_identity)
age = tf.feature_column.numeric_column(key='age', default_value=0.0)
classifier_dnn = tf.estimator.DNNClassifier(
hidden_units=[4],
feature_columns=[age, language_indicator, language_embedding, class_id_indicator])
classifier_dnn.train(input_fn=_train_input_fn, steps=5)
# Build the metadata.
md_builder = EstimatorMetadataBuilder(
classifier_dnn, [age, language, class_identity], _get_json_serving_input_fn, 'logits')
model_path = MODEL_PATH
グラフ
Explainable AI SDK は、Keras や Estimator API を使用せずに作成された TensorFlow モデルもサポートしています。
import tensorflow.compat.v1 as tf
from explainable_ai_sdk.metadata.tf.v1 import GraphMetadataBuilder
# Build a model.
sess = tf.Session(graph=tf.Graph())
with sess.graph.as_default():
x = tf.placeholder(shape=[None, 10], dtype=tf.float32, name='inp')
weights = tf.constant(1., shape=(10, 2), name='weights')
bias_weight = tf.constant(1., shape=(2,), name='bias')
linear_layer = tf.add(tf.matmul(x, weights), bias_weight)
prediction = tf.nn.relu(linear_layer)
# Build the metadata.
builder = GraphMetadataBuilder(
session=sess, tags=['serve'])
builder.add_numeric_metadata(x)
builder.add_output_metadata(prediction)
model_path = os.path.join('gs://', 'BUCKET_NAME', 'PATH_TO_MODEL')
builder.save_model_with_metadata(model_path)
モデルグラフを構築したら、1 つ以上のモデル入力と 1 つの出力を使用して説明メタデータを構築します。Explainable AI SDK は、入力の種類(数値、カテゴリ、画像、テキストなど)ごとにメタデータを追加する際に役立つ関数を提供します。
結果の explanation_metadata.json
ファイルは次のようになります。
{
"outputs": {
"Relu": {
"output_tensor_name": "Relu:0"
}
},
"inputs": {
"inp": {
"input_tensor_name": "inp:0",
"encoding": "identity",
"modality": "numeric"
}
},
"framework": "Tensorflow",
"tags": [
"explainable_ai_sdk"
]
}
省略可能な説明メタデータの設定
デフォルトでは、Explainable AI SDK は、モデルの入出力に関して必要な情報のみを含む説明メタデータ ファイルを生成します。説明メタデータ ファイルを保存する前に、入力ベースラインと画像の可視化設定に関するオプションの構成を含めることが可能です。または、説明メタデータ ファイルの作成後にそのファイルを編集することもできます。
入力ベースラインの設定
入力ベースラインは、追加情報のない特徴を表します。表形式モデルのベースラインは、トレーニング データに関連した中央値、最小値、最大値、ランダム値のいずれかです。同様に、画像モデルのベースラインは、黒い画像、白い画像、灰色の画像、ランダムなピクセル値を持つ画像のいずれかです。
1 つのベースラインから始めることをおすすめします。必要に応じて、ベースラインを変更できます。また、複数のベースラインを使用することもできます。ベースラインの調整方法の例をご覧ください。
画像データの可視化設定の構成
画像データを使用している場合は、説明メタデータ ファイルに可視化設定を追加して、説明結果の表示方法を構成できます。これが追加されない場合、AI Explanations はデフォルト設定を使用します。
可視化オプションの例、または API リファレンスで設定の詳細について確認してください。
次のステップ
- サンプル ノートブックを試す。
- 説明とともにモデルをデプロイする方法を学習する。