为 AI Explanations 准备元数据

部署模型时,您必须提交说明元数据文件以配置说明请求。此元数据文件必须包含模型的输入和输出,以便为说明请求选择特征。或者,您还可以包含输入基准并配置图片数据的可视化设置。

本指南介绍在使用 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 示例基准。要更新元数据并添加更多字段,请使用与数据类型匹配的 setter 函数:set_numeric_metadata()set_categorical_metadata()set_image_metadata()

TensorFlow 1.15 的 Explainable AI SDK 示例

Explainable AI SDK 支持使用 tf.kerastf.estimatortf.Graph 构建的 TensorFlow 1.15 模型。

Keras

Explainable AI SDK 支持使用 Sequential 和 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)

构建模型图后,您可以使用一个或多个模型输入和一个输出来构建说明元数据。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 会生成一个说明元数据文件,其中仅包含有关模型输入和输出的必需信息。在保存说明元数据文件之前,您可以为输入基准和图片可视化设置添加可选配置。或者,您可以在创建说明元数据文件之后编辑该文件。

设置输入基准

输入基准表示不提供其他任何信息的特征。表格模型的基准可以是与训练数据相关的中间值、最小值、最大值或随机值。同样,对于图片模型,基准可以是黑色图片、白色图片、灰色图片或具有随机像素值的图片。

建议从一个基准开始。如果需要,您可以更改基准或使用多个基准。请参阅如何调整基准的示例。

配置图片数据的可视化设置

如果您使用图片数据,可以通过向说明元数据文件添加可视化配置,配置说明结果的显示方式。如果不添加此配置,AI Explanations 将使用默认设置。

请参阅可视化选项示例,或在 API 参考文档中了解有关设置的更多信息。

后续步骤