Демонстрация автономного модельного набора инструментов для карт

Этот «автономный» ноутбук демонстрирует использование Model Card Toolkit без контекста TFX / MLMD. Чтобы узнать , как использовать Model Card Toolkit с TFX / MLMD, пожалуйста , проверьте MLMD Model Card Toolkit Demo .

Посмотреть на TensorFlow.org Запускаем в Google Colab Посмотреть на GitHub Скачать блокнот

Цель

В этой записной книжке показано, как создать модельную карту с помощью инструментария модельной карты в среде Jupyter / Colab. Вы можете узнать больше о модели карт на https://modelcards.withgoogle.com/about

В этой демонстрации мы используем модель Keras. Но приведенная ниже логика применима и к другим фреймворкам машинного обучения в целом.

Настраивать

Сначала нам нужно а) установить и импортировать необходимые пакеты и б) загрузить данные.

Обновитесь до Pip 20.2 и установите 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'

Вы перезапускали среду выполнения?

Если вы используете Google Colab, при первом запуске указанной выше ячейки вы должны перезапустить среду выполнения (Runtime> Restart runtime ...). Это связано с тем, как Colab загружает пакеты.

Импорт

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

Модель

Мы будем использовать pretrained модель с архитектурой , основанной от MobileNetV2 , популярной 16-слойной модели классификации изображений. Наша модель была обучена различать Betweens кошка и собака с использованием Кошки против собак набора данных. Учебная модель была основана на передаче 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.

Набор данных

В наборе данных "кошки против собак" метка = 0 соответствует кошкам, а метка = 1 соответствует собакам.

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

Используйте инструментарий Model Card Toolkit

Инициализировать набор инструментов для модельной карты

Первый шаг заключается в инициализации ModelCardToolkit объект, который сохраняет активы , включая модель карты JSON файл и документ модель карты . Вызов ModelCardToolkit.scaffold_assets() для создания этих активов и вернуть ModelCard объект.

# 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()

Добавьте аннотации к карточке модели

ModelCard объект , возвращаемый scaffold_assets() имеет множество полей , которые могут быть непосредственно изменены. Эти поля отображаются в окончательно сгенерированном документе Model Card. Для полного списка, см model_card.py . Смотрите документацию для получения более подробной информации.

Текстовые поля

Детали модели

model_card.model_details содержит множество основных полей метаданных , таких как name , owners и version . Вы можете предоставить описание вашей модели в overview поле.

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')]
Количественный анализ

model_card.quantitative_analysis содержит информацию о метриках производительности по модели.

Ниже мы создаем некоторые синтетические значения показателей производительности для гипотетической модели, построенной на нашем наборе данных.

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'),
]
Соображения

model_card.considerations содержит информацию о квалификации вашей модели - каковы соответствующие прецеденты, каковы ограничения , которые пользователи должны иметь в виду, каковы этические соображения применения и т.д.

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.'
)]

Поля графа

Часто рекомендуется, чтобы отчет содержал информацию об обучающих данных модели и ее эффективности в оценочных данных. Model Card Toolkit позволяет пользователям кодировать эту информацию в визуализациях, отображаемых в Model Card.

model_card имеет три секции для графов - model_card.model_parameters.data.train.graphics для подготовки набора данных статистики, model_card.model_parameters.data.eval.graphics для статистики оценки набора данных и model_card.quantitative_analysis.graphics для количественного анализа эффективности модели.

Графики сохраняются в виде base64 строки . Если у вас есть Matplotlib фигура, вы можете преобразовать его в строку base64 с 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

Теперь мы можем добавить их в нашу 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),
]

Создайте карточку модели

Создадим документ Model Card. Доступные форматы сохраняются в model_card_toolkit / шаблоне . Здесь мы продемонстрируем форматы HTML и Markdown.

Во- первых, нам нужно обновить ModelCardToolkit с последними ModelCard .

mct.update_model_card(model_card)

Теперь ModelCardToolkit может генерировать документ Model Card с 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))

Вы также можете вывести карточку модели в других форматах, например в 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))

Карточка модели для настроенной модели MobileNetV2 для кошек и собак

Детали модели

Обзор

Эта модель отличает образы кошек и собак. Он использует архитектуру MobileNetV2 ( https://arxiv.org/abs/1801.04381 ) и обучается на Кошки против собак набора данных ( https://www.tensorflow.org/datasets/catalog/cats_vs_dogs ). Эта модель работает с высокой точностью как на изображениях кошек, так и собак.

Версия

имя: v1.0

дата: 28.08.2020

Владельцы

  • Команда Model Cards, model-cards@google.com

Лицензии

  • Apache-2.0

использованная литература

Цитаты

Соображения

Случаи применения

  • Эта модель классифицирует изображения кошек и собак.

Ограничения

  • Эта модель не может классифицировать изображения других классов.

Этические соображения

  • Риск: хотя различие между кошками и собаками, как правило, считается безвредным применением машинного обучения, могут возникнуть пагубные результаты, когда модель пытается классифицировать изображения, не содержащие кошек или собак.
    • Стратегия смягчения последствий: избегайте применения на изображениях без собак и кошек.

Графика

Размер набора для проверки

Точность

Метрики

Имя Ценность
точность 0,981249988079071
точность, кот 0.9932885766029358
точность, Собака 0,9707602262496948