部署模型时,您必须提交说明元数据文件以配置说明请求。此元数据文件必须包含模型的输入和输出,以便为说明请求选择特征。或者,您还可以包含输入基准并配置图片数据的可视化设置。
本指南介绍在使用 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.keras
、tf.estimator
或 tf.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 参考文档中了解有关设置的更多信息。
后续步骤
- 试用示例笔记本。
- 了解如何部署具有说明的模型。