Notebook "mandiri" ini menunjukkan penggunaan Model Card Toolkit tanpa konteks TFX/MLMD. Untuk mempelajari cara menggunakan Model Kartu Toolkit dengan TFX / MLMD, silakan cek Kartu MLMD Model Toolkit Demo .
Lihat di TensorFlow.org | Jalankan di Google Colab | Lihat di GitHub | Unduh buku catatan |
Objektif
Notebook ini menunjukkan cara membuat Model Card menggunakan Model Card Toolkit di lingkungan Jupyter/Colab. Anda dapat mempelajari lebih lanjut tentang kartu model pada https://modelcards.withgoogle.com/about
Kami menggunakan model Keras dalam demo ini. Namun logika di bawah ini juga berlaku untuk framework ML lainnya secara umum.
Mempersiapkan
Pertama-tama kita perlu a) menginstal dan mengimpor paket yang diperlukan, dan b) mengunduh data.
Tingkatkan ke Pip 20.2 dan instal 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'
Apakah Anda me-restart runtime?
Jika Anda menggunakan Google Colab, pertama kali menjalankan sel di atas, Anda harus memulai ulang runtime (Runtime > Restart runtime ...). Ini karena cara Colab memuat paket.
Impor
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
Model
Kami akan menggunakan model pretrained dengan arsitektur didasarkan dari MobileNetV2 , 16-lapisan model klasifikasi citra populer. Model kami telah dilatih untuk membedakan antara perantara kucing dan anjing menggunakan Kucing vs Anjing dataset. Pelatihan Model ini didasarkan pada perpindahan TensorFlow pembelajaran tutorial .
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.
Himpunan data
Dalam kumpulan data kucing-vs-anjing, label=0 sesuai dengan kucing sedangkan label=1 sesuai dengan anjing.
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
Gunakan Toolkit Kartu Model
Inisialisasi Toolkit Kartu Model
Langkah pertama adalah untuk menginisialisasi ModelCardToolkit
objek, yang mempertahankan aset termasuk kartu file model JSON dan dokumen kartu model . Panggilan ModelCardToolkit.scaffold_assets()
untuk menghasilkan aset tersebut dan mengembalikan ModelCard
objek.
# 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()
Anotasi Kartu Model
The ModelCard
objek dikembalikan oleh scaffold_assets()
memiliki banyak bidang yang dapat dimodifikasi langsung. Bidang-bidang ini dirender dalam dokumen Model Card yang dihasilkan akhir. Untuk daftar lengkap, lihat model_card.py . Lihat dokumentasi untuk rincian lebih lanjut.
Bidang Teks
Detail Model
model_card.model_details
mengandung berbagai bidang metadata dasar seperti name
, owners
, dan version
. Anda dapat memberikan keterangan untuk model Anda di overview
lapangan.
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')]
Analisis kuantitatif
model_card.quantitative_analysis
berisi informasi tentang metrik kinerja model.
Di bawah ini, kami membuat beberapa nilai metrik kinerja sintetis untuk model hipotetis yang dibuat di set data kami.
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'),
]
Pertimbangan
model_card.considerations
berisi kualifikasi informasi tentang model Anda - apa adalah kasus penggunaan yang tepat, apa yang keterbatasan yang pengguna harus diingat, apa pertimbangan etis dari aplikasi, dll
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.'
)]
Bidang Grafik
Seringkali praktik terbaik untuk laporan memberikan informasi tentang data pelatihan model, dan kinerjanya di seluruh data evaluasi. Model Card Toolkit memungkinkan pengguna untuk mengkodekan informasi ini dalam visualisasi, yang dirender dalam Model Card.
model_card
memiliki tiga bagian untuk grafik - model_card.model_parameters.data.train.graphics
untuk pelatihan dataset statistik, model_card.model_parameters.data.eval.graphics
untuk statistik evaluasi dataset, dan model_card.quantitative_analysis.graphics
untuk analisis kuantitatif kinerja model.
Grafik disimpan sebagai base64 string . Jika Anda memiliki matplotlib angka, Anda dapat dikonversi ke string base64 dengan 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)
Sekarang kita dapat menambahkannya ke kami 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),
]
Hasilkan Kartu Model
Mari buat dokumen Model Card. Format yang tersedia disimpan di model_card_toolkit / template . Di sini, kami akan mendemonstrasikan format HTML dan Markdown.
Pertama, kita perlu memperbarui ModelCardToolkit
dengan terbaru ModelCard
.
mct.update_model_card(model_card)
Sekarang, ModelCardToolkit
dapat menghasilkan dokumen Kartu Model dengan 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))
Anda juga dapat menampilkan Kartu Model dalam format lain, seperti Penurunan Harga.
# 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))
Kartu Model untuk Model MobileNetV2 yang Disempurnakan untuk Kucing vs. Anjing
Detail Model
Ringkasan
Model ini membedakan gambar kucing dan anjing. Menggunakan arsitektur MobileNetV2 ( https://arxiv.org/abs/1801.04381 ) dan dilatih pada Kucing vs Anjing dataset ( https://www.tensorflow.org/datasets/catalog/cats_vs_dogs ). Model ini tampil dengan akurasi tinggi pada gambar Kucing dan Anjing.
Versi: kapan
nama: v1.0
tanggal: 28/08/2020
Pemilik
- Tim Kartu Model, model-cards@google.com
Lisensi
- Apache-2.0
Referensi
kutipan
Pertimbangan
Gunakan Kasus
- Model ini mengklasifikasikan gambar kucing dan anjing.
Keterbatasan
- Model ini tidak mampu mengklasifikasikan citra kelas lain.
Pertimbangan Etis
- Risiko: Meskipun membedakan antara kucing dan anjing umumnya disetujui sebagai aplikasi pembelajaran mesin yang tidak berbahaya, hasil yang berbahaya dapat terjadi saat model mencoba mengklasifikasikan gambar yang tidak berisi kucing atau anjing.
- Strategi Mitigasi: Hindari aplikasi pada gambar non-anjing dan non-kucing.
grafis
Ukuran Set Validasi
Ketepatan
Metrik
Nama | Nilai |
---|---|
ketepatan | 0.981249988079071 |
akurasi, kucing | 0,9932885766029358 |
akurasi, Anjing | 0.9707602262496948 |