این نوت بوک "مستقل" استفاده از جعبه ابزار مدل کارت را بدون زمینه 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)
# 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)
حالا ما می توانیم آنها را به ما اضافه کنید 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 |