Demo Toolkit Kartu Model Mandiri

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)

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

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