Demo del kit di strumenti per schede modello autonomo

Questo notebook "autonomo" dimostra l'utilizzo del Model Card Toolkit senza il contesto TFX/MLMD. Per imparare a utilizzare modello di scheda Toolkit con TFX / MLMD, si prega di controllare MLMD modello di scheda Toolkit Demo .

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza su GitHub Scarica taccuino

Obbiettivo

Questo notebook mostra come generare una Model Card utilizzando il Model Card Toolkit in un ambiente Jupyter/Colab. È possibile saperne di più su modelli di tessere a https://modelcards.withgoogle.com/about

In questa demo utilizziamo un modello Keras. Ma la logica seguente si applica anche ad altri framework ML in generale.

Impostare

Per prima cosa dobbiamo a) installare e importare i pacchetti necessari e b) scaricare i dati.

Aggiorna a Pip 20.2 e installa il Model Card Toolkit

pip install --upgrade pip==20.2
pip install 'model-card-toolkit>=1.0.0,<1.1'
pip install 'tensorflow>=2.3.1'

Hai riavviato il runtime?

Se stai utilizzando Google Colab, la prima volta che esegui la cella sopra, devi riavviare il runtime (Runtime > Riavvia runtime...). Ciò è dovuto al modo in cui Colab carica i pacchetti.

Importazioni

import tensorflow as tf
import numpy as np
import model_card_toolkit as mctlib
from model_card_toolkit.documentation.examples import cats_vs_dogs
from model_card_toolkit.utils.graphics import figure_to_base64str
import tempfile
import matplotlib.pyplot as plt
from IPython import display
import requests
import os
import zipfile

Modello

Useremo un modello preaddestrato con l'architettura in base al largo MobileNetV2 , un 16-strato popolare modello di classificazione delle immagini. Il nostro modello è stato addestrato per distinguere tra Betweens cani e gatti utilizzando i gatti contro i cani insieme di dati. La formazione modello era basato sul trasferimento tensorflow apprendimento esercitazione .

URL = 'https://storage.googleapis.com/cats_vs_dogs_model/cats_vs_dogs_model.zip'
BASE_PATH = tempfile.mkdtemp()
ZIP_PATH = os.path.join(BASE_PATH, 'cats_vs_dogs_model.zip')
MODEL_PATH = os.path.join(BASE_PATH,'cats_vs_dogs_model')

r = requests.get(URL, allow_redirects=True)
open(ZIP_PATH, 'wb').write(r.content)

with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref:
    zip_ref.extractall(BASE_PATH)

model = tf.keras.models.load_model(MODEL_PATH)
WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named "keras_metadata.pb" in the SavedModel directory.
WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named "keras_metadata.pb" in the SavedModel directory.

set di dati

Nel set di dati gatti contro cani, label=0 corrisponde ai gatti mentre label=1 corrisponde ai cani.

def compute_accuracy(data):
  x = np.stack(data['examples'])
  y = np.asarray(data['labels'])
  _, metric = model.evaluate(x, y)
  return metric
examples = cats_vs_dogs.get_data()
print('num validation examples:', len(examples['combined']['examples']))
print('num cat examples:', len(examples['cat']['examples']))
print('num dog examples:', len(examples['dog']['examples']))
num validation examples: 320
num cat examples: 149
num dog examples: 171
2022-01-07 19:54:14.702877: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
accuracy = compute_accuracy(examples['combined'])
cat_accuracy = compute_accuracy(examples['cat'])
dog_accuracy = compute_accuracy(examples['dog'])
10/10 [==============================] - 9s 12ms/step - loss: 0.0794 - binary_accuracy: 0.9812
5/5 [==============================] - 1s 41ms/step - loss: 0.0608 - binary_accuracy: 0.9933
6/6 [==============================] - 0s 34ms/step - loss: 0.0956 - binary_accuracy: 0.9708

Usa il kit di strumenti per schede modello

Inizializzare il Model Card Toolkit

Il primo passo è quello di inizializzare un ModelCardToolkit oggetto, che mantiene le attività tra cui un file di JSON carta modello e documento carta modello . Chiamata ModelCardToolkit.scaffold_assets() per generare tali attività e restituiscono un ModelCard oggetto.

# https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/model_card_toolkit.py
model_card_dir = tempfile.mkdtemp()
mct = mctlib.ModelCardToolkit(model_card_dir)

# https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/model_card.py
model_card = mct.scaffold_assets()

Annota la scheda modello

La ModelCard oggetto restituito da scaffold_assets() ha molti campi che possono essere modificati direttamente. Questi campi vengono resi nel documento finale della Model Card generato. Per un elenco completo, vedere model_card.py . Vedere la documentazione per maggiori dettagli.

Campi di testo

Dettagli del modello

model_card.model_details contiene molti campi di metadati di base come name , owners , e version . È possibile fornire una descrizione del modello nella overview campo.

model_card.model_details.name = 'Fine-tuned MobileNetV2 Model for Cats vs. Dogs'
model_card.model_details.overview = (
    'This model distinguishes cat and dog images. It uses the MobileNetV2 '
    'architecture (https://arxiv.org/abs/1801.04381) and is trained on the '
    'Cats vs Dogs dataset '
    '(https://www.tensorflow.org/datasets/catalog/cats_vs_dogs). This model '
    'performed with high accuracy on both Cat and Dog images.'
)
model_card.model_details.owners = [
  mctlib.Owner(name='Model Cards Team', contact='model-cards@google.com')
]
model_card.model_details.version = mctlib.Version(name='v1.0', date='08/28/2020')
model_card.model_details.references = [
    mctlib.Reference(reference='https://www.tensorflow.org/guide/keras/transfer_learning'),
    mctlib.Reference(reference='https://arxiv.org/abs/1801.04381'),
]
model_card.model_details.licenses = [mctlib.License(identifier='Apache-2.0')]
model_card.model_details.citations = [mctlib.Citation(citation='https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/documentation/examples/Standalone_Model_Card_Toolkit_Demo.ipynb')]
Analisi quantitativa

model_card.quantitative_analysis contiene informazioni sulle metriche di performance del modello.

Di seguito, creiamo alcuni valori sintetici delle metriche delle prestazioni per un modello ipotetico costruito sul nostro set di dati.

model_card.quantitative_analysis.performance_metrics = [
  mctlib.PerformanceMetric(type='accuracy', value=str(accuracy)),
  mctlib.PerformanceMetric(type='accuracy', value=str(cat_accuracy), slice='cat'),
  mctlib.PerformanceMetric(type='accuracy', value=str(dog_accuracy), slice='Dog'),
]
Considerazioni

model_card.considerations contiene qualificanti informazioni sul modello - quali sono i casi di utilizzo appropriati, quali sono le limitazioni che gli utenti dovrebbero tenere a mente, quali sono le considerazioni etiche di applicazione, etc.

model_card.considerations.use_cases = [
    mctlib.UseCase(description='This model classifies images of cats and dogs.')
]
model_card.considerations.limitations = [
    mctlib.Limitation(description='This model is not able to classify images of other classes.')
]
model_card.considerations.ethical_considerations = [mctlib.Risk(
    name=
        'While distinguishing between cats and dogs is generally agreed to be '
        'a benign application of machine learning, harmful results can occur '
        'when the model attempts to classify images that don’t contain cats or '
        'dogs.',
    mitigation_strategy=
        'Avoid application on non-dog and non-cat images.'
)]

Campi del grafico

Spesso è consigliabile che un report fornisca informazioni sui dati di training di un modello e sulle sue prestazioni attraverso i dati di valutazione. Model Card Toolkit consente agli utenti di codificare queste informazioni nelle visualizzazioni, rese nella Model Card.

model_card ha tre sezioni per i grafici - model_card.model_parameters.data.train.graphics per la formazione di dataset statistiche, model_card.model_parameters.data.eval.graphics per le statistiche di valutazione DataSet e model_card.quantitative_analysis.graphics per l'analisi quantitativa delle prestazioni del modello.

I grafici sono memorizzati come base64 stringhe . Se si dispone di un matplotlib figura, è possibile convertire in una stringa base64 con model_card_toolkit.utils.graphics.figure_to_base64str() .

# Validation Set Size Bar Chart
fig, ax = plt.subplots()
width = 0.75
rects0 = ax.bar(0, len(examples['combined']['examples']), width, label='Overall')
rects1 = ax.bar(1, len(examples['cat']['examples']), width, label='Cat')
rects2 = ax.bar(2, len(examples['dog']['examples']), width, label='Dog')
ax.set_xticks(np.arange(3))
ax.set_xticklabels(['Overall', 'Cat', 'Dog'])
ax.set_ylabel('Validation Set Size')
ax.set_xlabel('Slices')
ax.set_title('Validation Set Size for Slices')
validation_set_size_barchart = figure_to_base64str(fig)

png

# Acuracy Bar Chart
fig, ax = plt.subplots()
width = 0.75
rects0 = ax.bar(0, accuracy, width, label='Overall')
rects1 = ax.bar(1, cat_accuracy, width, label='Cat')
rects2 = ax.bar(2, dog_accuracy, width, label='Dog')
ax.set_xticks(np.arange(3))
ax.set_xticklabels(['Overall', 'Cat', 'Dog'])
ax.set_ylabel('Accuracy')
ax.set_xlabel('Slices')
ax.set_title('Accuracy on Slices')
accuracy_barchart = figure_to_base64str(fig)

png

Ora possiamo aggiungere alla nostra ModelCard .

model_card.model_parameters.data.append(mctlib.Dataset())
model_card.model_parameters.data[0].graphics.collection = [
  mctlib.Graphic(name='Validation Set Size', image=validation_set_size_barchart),
]
model_card.quantitative_analysis.graphics.collection = [
  mctlib.Graphic(name='Accuracy', image=accuracy_barchart),
]

Genera la scheda modello

Generiamo il documento Model Card. I formati disponibili sono conservati a model_card_toolkit / template . Qui dimostreremo i formati HTML e Markdown.

In primo luogo, abbiamo bisogno di aggiornare il ModelCardToolkit con l'ultima ModelCard .

mct.update_model_card(model_card)

Ora, il ModelCardToolkit in grado di generare un documento modello di scheda con ModelCardToolkit.export_format() .

# Generate a model card document in HTML (default)
html_doc = mct.export_format()

# Display the model card document in HTML
display.display(display.HTML(html_doc))

Puoi anche produrre una scheda modello in altri formati, come Markdown.

# Generate a model card document in Markdown
md_path = os.path.join(model_card_dir, 'template/md/default_template.md.jinja')
md_doc = mct.export_format(template_path=md_path, output_file='model_card.md')

# Display the model card document in Markdown
display.display(display.Markdown(md_doc))

Scheda modello per il modello MobileNetV2 ottimizzato per gatti contro cani

Dettagli del modello

Panoramica

Questo modello distingue le immagini di cani e gatti. Esso utilizza l'architettura MobileNetV2 ( https://arxiv.org/abs/1801.04381 ) ed è addestrato sui gatti contro i cani dataset ( https://www.tensorflow.org/datasets/catalog/cats_vs_dogs ). Questo modello ha eseguito con elevata precisione sia le immagini di gatto che di cane.

Versione

nome: v1.0

data: 28/08/2020

Proprietari

  • Model Cards Team, model-cards@google.com

Licenze

  • Apache-2.0

Riferimenti

citazioni

Considerazioni

Casi d'uso

  • Questo modello classifica le immagini di cani e gatti.

Limitazioni

  • Questo modello non è in grado di classificare immagini di altre classi.

Considerazioni etiche

  • Rischio: sebbene sia generalmente accettato che la distinzione tra cani e gatti sia un'applicazione benigna dell'apprendimento automatico, possono verificarsi risultati dannosi quando il modello tenta di classificare immagini che non contengono cani o gatti.
    • Strategia di mitigazione: evitare l'applicazione su immagini senza cani e senza gatti.

Grafica

Dimensione set di convalida

Precisione

Metrica

Nome Valore
precisione 0.981249988079071
precisione, gatto 0.9932885766029358
precisione, cane 0.9707602262496948