การสาธิตชุดเครื่องมือการ์ดแบบสแตนด์อโลน

สมุดบันทึก "แบบสแตนด์อโลน" นี้สาธิตการใช้ Model Card Toolkit โดยไม่มีบริบท TFX/MLMD เพื่อเรียนรู้วิธีการใช้บัตรรุ่นเครื่องมือที่มี TFX / MLMD โปรดตรวจสอบ MLMD รุ่นบัตร Toolkit สาธิต

ดูบน TensorFlow.org ทำงานใน Google Colab ดูบน GitHub ดาวน์โหลดโน๊ตบุ๊ค

วัตถุประสงค์

สมุดบันทึกนี้สาธิตวิธีสร้าง Model Card โดยใช้ Model Card Toolkit ในสภาพแวดล้อม Jupyter/Colab คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับบัตรรุ่นที่ https://modelcards.withgoogle.com/about

เรากำลังใช้โมเดล Keras ในการสาธิตนี้ แต่ตรรกะด้านล่างยังใช้กับเฟรมเวิร์ก ML อื่นๆ โดยทั่วไปด้วย

ติดตั้ง

ก่อนอื่นเราต้อง a) ติดตั้งและนำเข้าแพ็คเกจที่จำเป็น และ b) ดาวน์โหลดข้อมูล

อัปเกรดเป็น 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 ในครั้งแรกที่คุณเรียกใช้เซลล์ด้านบน คุณต้องเริ่มรันไทม์ใหม่ (รันไทม์ > รีสตาร์ทรันไทม์ ...) นี่เป็นเพราะวิธีที่ 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 ใช้ แมว VS สุนัข ชุด การฝึกอบรมรุ่นอยู่บนพื้นฐานของ การเรียนรู้การถ่ายโอน 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.

ชุดข้อมูล

ในชุดข้อมูล cat-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

ใช้ Model Card Toolkit

เริ่มต้น 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 สามารถสร้างเอกสารรุ่นบัตร 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))

คุณยังสามารถส่งออก Model Card ในรูปแบบอื่นๆ เช่น 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 แบบละเอียด โมเดลสำหรับ Cats vs. Dogs

รายละเอียดรุ่น

ภาพรวม

โมเดลนี้แยกภาพแมวและสุนัข มันใช้สถาปัตยกรรม MobileNetV2 ( https://arxiv.org/abs/1801.04381 ) และมีการอบรมเกี่ยวกับแมว VS ชุดสุนัข ( https://www.tensorflow.org/datasets/catalog/cats_vs_dogs ) โมเดลนี้ทำงานด้วยความแม่นยำสูงทั้งภาพ Cat และ Dog

เวอร์ชั่น

ชื่อ: v1.0

วันที่ : 08/28/2020

เจ้าของ

  • ทีมโมเดลการ์ด model-cards@google.com

ใบอนุญาต

  • Apache-2.0

อ้างอิง

การอ้างอิง

ข้อควรพิจารณา

ใช้กรณี

  • โมเดลนี้จำแนกภาพแมวและสุนัข

ข้อจำกัด

  • โมเดลนี้ไม่สามารถจำแนกรูปภาพของคลาสอื่นได้

ข้อพิจารณาด้านจริยธรรม

  • ความเสี่ยง: แม้ว่าโดยทั่วไปแล้วการแยกแยะระหว่างแมวกับสุนัขจะได้รับการยินยอมให้เป็นแอปพลิเคชันที่ไม่เป็นอันตรายของการเรียนรู้ด้วยเครื่อง แต่ผลลัพธ์ที่เป็นอันตรายอาจเกิดขึ้นได้เมื่อตัวแบบพยายามจัดประเภทรูปภาพที่ไม่มีแมวหรือสุนัข
    • กลยุทธ์การลดผลกระทบ: หลีกเลี่ยงการนำไปใช้กับรูปภาพที่ไม่ใช่สุนัขและไม่ใช่แมว

กราฟิก

ขนาดชุดตรวจสอบความถูกต้อง

ความแม่นยำ

ตัวชี้วัด

ชื่อ ค่า
ความแม่นยำ 0.981249988079071
ความแม่นยำแมว 0.9932885766029358
ความแม่นยำ หมา 0.9707602262496948