نسخه نمایشی جعبه ابزار کارت مستقل مدل

این نوت بوک "مستقل" استفاده از جعبه ابزار مدل کارت را بدون زمینه TFX/MLMD نشان می دهد. برای آشنایی با نحوه استفاده از مدل کارت جعبه ابزار با TFX / MLMD، لطفا MLMD مدل کارت جعبه ابزار نسخه ی نمایشی .

مشاهده در TensorFlow.org در Google Colab اجرا شود در GitHub مشاهده کنید دانلود دفترچه یادداشت

هدف، واقعگرایانه

این نوت بوک نحوه تولید یک کارت مدل را با استفاده از جعبه ابزار مدل کارت در محیط Jupyter/Colab نشان می دهد. شما می توانید اطلاعات بیشتر در مورد کارت های مدل در یاد https://modelcards.withgoogle.com/about

ما در این دمو از مدل Keras استفاده می کنیم. اما منطق زیر به طور کلی برای سایر چارچوب های ML نیز صدق می کند.

برپایی

ابتدا باید الف) بسته های لازم را نصب و وارد کنیم و ب) داده ها را دانلود کنیم.

به 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 مدل طبقه بندی های تصویری محبوب. مدل ما آموزش داده شده است به تمایز بین واسطه گربه ها و سگ با استفاده از گربه انتظار: کاهش از سگ مجموعه داده. آموزش مدل بر پایهی آموزش یادگیری انتقال 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.

مجموعه داده

در مجموعه داده cats-vs-dogs، label=0 مربوط به گربه ها و label=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

از جعبه ابزار کارت مدل استفاده کنید

جعبه ابزار کارت مدل را راه اندازی کنید

اولین قدم این است برای مقداردهی اولیه به 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.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_parameters.data.train.graphics برای آموزش مجموعه داده آمار، model_card.model_parameters.data.eval.graphics برای آمار مجموعه داده های ارزیابی، و model_card.quantitative_analysis.graphics برای تجزیه و تحلیل کمی از عملکرد مدل.

نمودارهای به عنوان ذخیره شده از base64 رشته . اگر شما یک کتابخانه متپلات شکل، شما می توانید آن را به یک رشته از 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_toolkit / قالب . در اینجا، فرمت های HTML و Markdown را نشان خواهیم داد.

اول، ما نیاز به به روز رسانی ModelCardToolkit با آخرین ModelCard .

mct.update_model_card(model_card)

در حال حاضر، ModelCardToolkit می توانید یک سند کارت مدل با تولید 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

تاریخ: 2020/08/28

صاحبان

  • تیم کارت مدل، model-cards@google.com

مجوزها

  • آپاچی-2.0

منابع

استناد

ملاحظات

موارد استفاده

  • این مدل تصاویر گربه ها و سگ ها را طبقه بندی می کند.

محدودیت ها

  • این مدل قادر به طبقه بندی تصاویر کلاس های دیگر نیست.

ملاحظات اخلاقی

  • خطر: در حالی که تمایز بین گربه ها و سگ ها به طور کلی به عنوان یک کاربرد خوش خیم از یادگیری ماشین مورد توافق قرار می گیرد، نتایج مضری ممکن است زمانی رخ دهد که مدل تلاش می کند تصاویری را که حاوی گربه یا سگ نیستند طبقه بندی کند.
    • استراتژی کاهش: از اعمال بر روی تصاویر غیر سگ و غیر گربه خودداری کنید.

گرافیک

اندازه مجموعه اعتبارسنجی

دقت

معیارهای

نام مقدار
دقت 0.981249988079071
دقت، گربه 0.9932885766029358
دقت، سگ 0.9707602262496948