Preparazione dei metadati per AI Explanations

Quando esegui il deployment del modello, devi inviare un file di metadati di spiegazione per configurare la richiesta di spiegazioni. Questo file di metadati deve includere gli input e gli output del modello al fine di selezionare le funzionalità per la richiesta di spiegazioni. Facoltativamente, puoi includere basi di input e configurare impostazioni di visualizzazione per i dati delle immagini.

Questa guida spiega come utilizzare l'SDK Explainable AI per creare il file di metadati spiegazione mentre crei un nuovo modello con TensorFlow 2.x o TensorFlow 1.15 oppure utilizzando un modello TensorFlow 2.x esistente. Per richiedere spiegazioni relative a un modello TensorFlow 1.x esistente, devi creare manualmente il file di metadati delle spiegazioni.

Panoramica dei metadati della spiegazione

Il file di metadati di spiegazione è necessario per il deployment del modello su AI Explanations. Se specifichi gli input e gli output del modello, puoi selezionare caratteristiche specifiche per la richiesta di spiegazioni. Creerai un file denominato explanation_metadata.json e lo caricherai nel bucket Cloud Storage nella stessa directory del savedModel. L'SDK Explainable AI gestisce questo processo al posto tuo, mentre crei e salvi il modello.

Puoi anche aggiungere impostazioni facoltative al file di metadati delle spiegazioni:

Scopri di più sul file dei metadati della spiegazione nel riferimento API.

Installazione dell'SDK Explainable AI

L'SDK Explainable AI è un SDK Python che supporta modelli creati utilizzando:

  • TensorFlow 1.15 e TensorFlow 2.x
  • Python 3.7 o versioni successive.

Installa l'SDK Explainable AI:

pip3 install explainable_ai_sdk

Trovare input e output con l'SDK Explainable AI

L'SDK Explainable AI ti aiuta a trovare input e output quando crei o addestra un modello TensorFlow. In ognuno di questi casi, devi creare il file di metadati spiegazione subito dopo aver creato il modello. Per i modelli Keras e Estimator, l'SDK Explainable AI deduce gli input e gli output dal grafico del modello.

Prima di salvare il file dei metadati, puoi aggiornare tutti i valori di input e di output generati dall'SDK Explainable AI e aggiungere altri campi, come le basi degli input e le preferenze di visualizzazione.

Esempi di SDK Explainable AI per TensorFlow 2.x

SavedModelMetadataBuilder funziona per qualsiasi SaveModel creato utilizzando TensorFlow 2.x. In questo esempio, l'SDK Explainable AI crea e carica il file di metadati della spiegazione nella stessa directory del bucket Cloud Storage del modello:

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.

Se vuoi, puoi utilizzare la funzione get_metadata() per verificare i metadati generati prima di salvarli e caricarli.

Se utilizzi una funzione TensorFlow per salvare e caricare il modello, puoi utilizzare save_metadata() per creare ed esportare solo i metadati della spiegazione:

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)

Questo esempio mostra anche come impostare una base di input per i dati dell'immagine, utilizzando rumore casuale come base di riferimento. Utilizza una base di input più appropriata con il tuo set di dati. Come punto di partenza, consulta gli esempi di base di AI Explanations. Per aggiornare i metadati e aggiungere altri campi, utilizza la funzione setter corrispondente al tipo di dati: set_numeric_metadata(), set_categorical_metadata() o set_image_metadata().

Esempi di SDK Explainable AI per TensorFlow 1.15

L'SDK Explainable AI supporta i modelli TensorFlow 1.15 creati con tf.keras, tf.estimator o tf.Graph.

Keras

L'SDK Explainable AI supporta i modelli Keras creati con le API Sequential e Functional, nonché i modelli personalizzati creati mediante la sottoclassificazione della classe Model. Scopri di più sui diversi tipi di modelli 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)

Dopo aver creato il modello, utilizza il generatore di metadati per ottenere gli input e gli output.

Strumento per la stima

L'SDK Explainable AI supporta i modelli di Estimator. Per il generatore di metadati, devi specificare le colonne delle funzionalità di input, la funzione di input di pubblicazione e una chiave di output.

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

Grafico

L'SDK Explainable AI supporta anche modelli TensorFlow creati senza le API Keras o Estimator.

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)

Dopo aver creato il grafico del modello, crei i metadati della spiegazione con uno o più input del modello e un output. L'SDK Explainable AI fornisce una funzione per aiutarti ad aggiungere metadati per ogni tipo di input: numerico, categorico, immagine e testo.

Il file explanation_metadata.json risultante sarà simile al seguente:

{
  "outputs": {
    "Relu": {
      "output_tensor_name": "Relu:0"
    }
  },
  "inputs": {
    "inp": {
      "input_tensor_name": "inp:0",
      "encoding": "identity",
      "modality": "numeric"
    }
  },
  "framework": "Tensorflow",
  "tags": [
    "explainable_ai_sdk"
  ]
}

Impostazioni facoltative dei metadati della spiegazione

Per impostazione predefinita, l'SDK Explainable AI produce un file di metadati di spiegazione con solo le informazioni richieste sugli input e gli output del modello. Prima di salvare il file dei metadati della spiegazione, puoi includere configurazioni facoltative per le basi di input e le impostazioni di visualizzazione delle immagini. In alternativa, puoi modificare il file dei metadati della spiegazione dopo la creazione.

Impostazione delle basi degli input

Le basi di input rappresentano una caratteristica che non fornisce informazioni aggiuntive. Le linee di riferimento per i modelli tabulari possono essere valori mediani, minimi, massimi o casuali in relazione ai dati di addestramento. Analogamente, per i modelli di immagine, la base di riferimento può essere un'immagine nera, bianca, grigia o con valori di pixel casuali.

È consigliabile iniziare con una base di riferimento. Se necessario, puoi modificare la base di riferimento o utilizzarne più di una. Consulta esempi di come modificare il valore di riferimento.

Configurazione delle impostazioni di visualizzazione per i dati immagine

Se utilizzi i dati di immagine, puoi configurare la modalità di visualizzazione dei risultati della spiegazione aggiungendo una configurazione di visualizzazione al file di metadati della spiegazione. Se non lo aggiungi, AI Explanations utilizza le impostazioni predefinite.

Consulta gli esempi delle opzioni di visualizzazione o scopri di più sulle impostazioni nel riferimento API.

Passaggi successivi