Este cuaderno "independiente" demuestra el uso del kit de herramientas de tarjetas modelo sin el contexto TFX / MLMD. Para aprender a utilizar la tarjeta Modelo Toolkit con TFX / MLMD, compruebe MLMD modelo de tarjeta de juego de herramientas de demostración .
Ver en TensorFlow.org | Ejecutar en Google Colab | Ver en GitHub | Descargar cuaderno |
Objetivo
Este cuaderno muestra cómo generar una tarjeta modelo utilizando el kit de herramientas de tarjeta modelo en un entorno de Jupyter / Colab. Usted puede aprender más sobre las tarjetas modelo en https://modelcards.withgoogle.com/about
Estamos usando un modelo de Keras en esta demostración. Pero la lógica siguiente también se aplica a otros marcos de ML en general.
Configuración
Primero necesitamos a) instalar e importar los paquetes necesarios, yb) descargar los datos.
Actualice a Pip 20.2 e instale 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'
¿Reinició el tiempo de ejecución?
Si está utilizando Google Colab, la primera vez que ejecuta la celda anterior, debe reiniciar el tiempo de ejecución (Tiempo de ejecución> Reiniciar tiempo de ejecución ...). Esto se debe a la forma en que Colab carga los paquetes.
Importaciones
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
Modelo
Vamos a utilizar un modelo pretrained con arquitectura basada fuera MobileNetV2 , un 16 capas populares modelo de clasificación de imágenes. Nuestro modelo ha sido entrenado para distinguir entre Betweens gatos y perros usando los Gatos vs Perros conjunto de datos. El modelo de formación se basa en el tutorial de aprendizaje transferencia TensorFlow .
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.
Conjunto de datos
En el conjunto de datos de perros y gatos, la etiqueta = 0 corresponde a los gatos, mientras que la etiqueta = 1 corresponde a los perros.
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
Utilice el kit de herramientas de la tarjeta modelo
Inicializar el kit de herramientas de la tarjeta modelo
El primer paso es inicializar un ModelCardToolkit
objeto, que mantiene activos incluyendo un archivo JSON modelo de tarjeta y el documento de modelo de tarjeta . Call ModelCardToolkit.scaffold_assets()
para generar estos activos y devuelven un ModelCard
objeto.
# 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()
Anotar la tarjeta modelo
El ModelCard
objeto devuelto por scaffold_assets()
tiene muchos campos que se pueden modificar directamente. Estos campos se representan en el documento de tarjeta modelo generado final. Para una lista completa, consulte model_card.py . Ver la documentación para más detalles.
Campos de texto
Detalles del modelo
model_card.model_details
contiene muchos campos de metadatos básicos como name
, owners
, y version
. Puede proporcionar una descripción para su modelo en la overview
de 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')]
Análisis cuantitativo
model_card.quantitative_analysis
contiene información acerca de las métricas de rendimiento de un modelo.
A continuación, creamos algunos valores de métrica de rendimiento sintéticos para un modelo hipotético construido a partir de nuestro conjunto de datos.
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'),
]
Consideraciones
model_card.considerations
contiene información contrastada acerca de su modelo - ¿Cuáles son los casos de uso adecuadas, ¿cuáles son las limitaciones que los usuarios deben tener en cuenta, ¿cuáles son las consideraciones éticas de la aplicación, 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.'
)]
Campos de gráfico
A menudo, es una buena práctica que un informe proporcione información sobre los datos de entrenamiento de un modelo y su rendimiento en los datos de evaluación. El kit de herramientas de la tarjeta modelo permite a los usuarios codificar esta información en visualizaciones, renderizadas en la tarjeta modelo.
model_card
tiene tres secciones para gráficos - model_card.model_parameters.data.train.graphics
para la formación de conjuntos de datos estadísticas, model_card.model_parameters.data.eval.graphics
para las estadísticas de la evaluación de conjunto de datos, y model_card.quantitative_analysis.graphics
de análisis cuantitativos de desempeño del modelo.
Los gráficos se almacenan como cadenas base64 . Si usted tiene un matplotlib figura, se puede convertir en una cadena de base 64 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)
# 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)
Ahora podemos añadir a nuestra 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),
]
Generar la tarjeta modelo
Generemos el documento de la tarjeta modelo. Los formatos disponibles son almacenados a model_card_toolkit / plantilla . Aquí, demostraremos los formatos HTML y Markdown.
En primer lugar, tenemos que actualizar el ModelCardToolkit
con la última ModelCard
.
mct.update_model_card(model_card)
Ahora, el ModelCardToolkit
puede generar un documento modelo de tarjeta 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))
También puede generar una tarjeta modelo en otros formatos, como 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))
Tarjeta modelo para el modelo MobileNetV2 ajustado para perros y gatos
Detalles del modelo
Descripción general
Este modelo distingue imágenes de perros y gatos. Se utiliza la arquitectura MobileNetV2 ( https://arxiv.org/abs/1801.04381 ) y está capacitado en los Gatos vs Perros conjunto de datos ( https://www.tensorflow.org/datasets/catalog/cats_vs_dogs ). Este modelo funcionó con alta precisión en imágenes de perros y gatos.
Versión
nombre: v1.0
fecha: 28/08/2020
Propietarios
- Equipo de Model Cards, model-cards@google.com
Licencias
- Apache-2.0
Referencias
Citas
Consideraciones
Casos de uso
- Este modelo clasifica imágenes de perros y gatos.
Limitaciones
- Este modelo no puede clasificar imágenes de otras clases.
Consideraciones éticas
- Riesgo: aunque generalmente se acepta que distinguir entre gatos y perros es una aplicación benigna del aprendizaje automático, pueden producirse resultados dañinos cuando el modelo intenta clasificar imágenes que no contienen gatos o perros.
- Estrategia de mitigación: evite la aplicación en imágenes que no sean de perros ni de gatos.
Gráficos
Tamaño del conjunto de validación
Exactitud
Métrica
Nombre | Valor |
---|---|
exactitud | 0.981249988079071 |
precisión, gato | 0,9932885766029358 |
precisión, perro | 0.9707602262496948 |