عرض توضيحي لمجموعة أدوات بطاقة النموذج المستقل

يوضح هذا الكمبيوتر الدفتري "المستقل" استخدام Model Card Toolkit بدون سياق TFX / MLMD. لمعرفة كيفية استخدام نموذج بطاقة الأدوات مع TFX / MLMD، يرجى مراجعة MLMD نموذج بطاقة أدوات تجريبي .

عرض على TensorFlow.org تشغيل في Google Colab عرض على جيثب تحميل دفتر

موضوعي

يوضح هذا الكمبيوتر الدفتري كيفية إنشاء نموذج بطاقة باستخدام Model Card Toolkit في بيئة 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 ...). هذا بسبب الطريقة التي يقوم بها كولاب بتحميل الحزم.

الواردات

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 ، تطابق التسمية = 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

استخدم مجموعة أدوات بطاقة النموذج

قم بتهيئة مجموعة أدوات بطاقة النموذج

الخطوة الأولى هي لتهيئة 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_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)

بي إن جي

# 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 ). تم تنفيذ هذا النموذج بدقة عالية على كل من صور Cat و Dog.

الإصدار

الاسم: v1.0

التاريخ: 08/28/2020

أصحاب

  • فريق Model Cards ، model-cards@google.com

التراخيص

  • اباتشي 2.0

مراجع

اقتباسات

الاعتبارات

استخدم حالات

  • هذا النموذج يصنف صور القطط والكلاب.

محددات

  • هذا النموذج غير قادر على تصنيف صور الفئات الأخرى.

الاعتبارات الاخلاقية

  • المخاطر: في حين أن التمييز بين القطط والكلاب متفق عليه عمومًا على أنه تطبيق حميد للتعلم الآلي ، يمكن أن تحدث النتائج الضارة عندما يحاول النموذج تصنيف الصور التي لا تحتوي على قطط أو كلاب.
    • استراتيجية التخفيف: تجنب التطبيق على الصور التي لا تحتوي على الكلاب وغير القطط.

الرسومات

حجم مجموعة التحقق من الصحة

دقة

المقاييس

اسم قيمة
صحة 0.981249988079071
الدقة ، القط 0.9932885766029358
الدقة ، يا كلب 0.9707602262496948