สมุดบันทึก "แบบสแตนด์อโลน" นี้สาธิตการใช้ 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)
# 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 กันเถอะ รูปแบบที่มีอยู่จะถูกเก็บไว้ที่ 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 |