Bağımsız Model Kartı Araç Seti Demosu

Bu "bağımsız" dizüstü bilgisayar, TFX/MLMD bağlamı olmadan Model Kartı Araç Takımının kullanımını gösterir. TFX / MLMD ile Model Kart Toolkit nasıl kullanılacağını öğrenmek için, lütfen kontrol edin MLMD Modeli Kart Toolkit Demo .

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın GitHub'da görüntüle Not defterini indir

Amaç

Bu not defteri, bir Jupyter/Colab ortamında Model Kartı Araç Takımı kullanılarak bir Model Kartın nasıl oluşturulacağını gösterir. En modeli kartlarıyla ilgili daha fazla bilgi edinebilirsiniz https://modelcards.withgoogle.com/about

Bu demoda bir Keras modeli kullanıyoruz. Ancak aşağıdaki mantık, genel olarak diğer ML çerçeveleri için de geçerlidir.

Kurmak

Öncelikle a) gerekli paketleri kurup içe aktarmamız ve b) verileri indirmemiz gerekiyor.

Pip 20.2'ye yükseltin ve Model Card Toolkit'i kurun

pip install --upgrade pip==20.2
pip install 'model-card-toolkit>=1.0.0,<1.1'
pip install 'tensorflow>=2.3.1'

Çalışma zamanını yeniden başlattınız mı?

Google Colab kullanıyorsanız, yukarıdaki hücreyi ilk kez çalıştırdığınızda, çalışma zamanını yeniden başlatmanız gerekir (Çalışma Zamanı > Çalışma zamanını yeniden başlat...). Bunun nedeni Colab'ın paketleri yükleme şeklidir.

ithalat

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

modeli

Biz kapalı tabanlı mimariye sahip bir pretrained modelini kullanacak MobileNetV2 , popüler 16 katlı görüntü sınıflandırma modeli. Bizim modeli Betweens kedi ve köpekler kullanılarak ayırt eğitilmiş köpekler vs Cats veri kümesi. Model eğitim dayanıyordu TensorFlow transferi öğrenme öğretici .

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.

veri kümesi

Kediler-köpekler veri setinde, etiket=0 kedilere, etiket=1 ise köpeklere karşılık gelir.

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 Kartı Araç Setini kullanın

Model Kartı Araç Setini Başlatın

İlk adım bir başlatmak etmektir ModelCardToolkit bir de dahil olmak üzere varlıklarını sürdürmektedir nesneyi modeli kartı JSON dosyası ve modeli kartı belgeye . Çağrı ModelCardToolkit.scaffold_assets() bu varlıkları oluşturmak ve dönmek için ModelCard nesnesi.

# 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()

Model Kartına Açıklama Ekleyin

ModelCard tarafından döndürülen nesne scaffold_assets() doğrudan değiştirilebilir birçok alana sahiptir. Bu alanlar, nihai oluşturulan Model Kart belgesinde işlenir. Kapsamlı bir liste için bkz model_card.py . Bkz belgelere Daha fazla ayrıntı için.

Metin Alanları

Model Detayları

model_card.model_details gibi birçok temel meta alanları içeren name , owners ve version . İçeri modeliniz için bir açıklama sağlayabilir overview alanına.

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')]
Kantitatif Analiz

model_card.quantitative_analysis bir modelin performans ölçümleri hakkında bilgi içermektedir.

Aşağıda, veri kümemiz üzerine kurulmuş varsayımsal bir model için bazı sentetik performans metrik değerleri oluşturuyoruz.

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'),
]
Hususlar

model_card.considerations modeliniz hakkında bilgi kalifiye içerir - vs. uygulamanın etik kaygılar nelerdir kullanıcılar akılda tutulması gerektiğini sınırlarının neler uygun kullanım durumlarını, ne

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.'
)]

Grafik Alanları

Bir raporun, bir modelin eğitim verileri ve değerlendirme verileri genelindeki performansı hakkında bilgi sağlaması genellikle en iyi uygulamadır. Model Kartı Araç Takımı, kullanıcıların bu bilgileri Model Kartında oluşturulan görselleştirmelerde kodlamasına olanak tanır.

model_card üç grafik bölümler vardır - model_card.model_parameters.data.train.graphics kümesi istatistikleri yetiştirilmesi için, model_card.model_parameters.data.eval.graphics değerlendirme veri kümesi istatistik ve model_card.quantitative_analysis.graphics model performansının nicel analizi için.

Grafikler olarak depolanır base64 dizeleri . Eğer bir varsa matplotlib rakam, sen bir base64 dizeye dönüştürmek 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

Şimdi bizim ekleyebilirsiniz 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 Kartı Oluşturun

Model Kart belgesini oluşturalım. Mevcut biçimleri depolanır model_card_toolkit / şablonun . Burada HTML ve Markdown formatlarını göstereceğiz.

İlk olarak, güncellemeniz gerekir ModelCardToolkit en son ModelCard .

mct.update_model_card(model_card)

Şimdi, ModelCardToolkit ile Model Kart belgesini üretebilir 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 Kartın çıktısını Markdown gibi başka biçimlerde de alabilirsiniz.

# 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))

Kediler ve Köpekler için İnce Ayarlı MobileNetV2 Modeli için Model Kartı

Model Detayları

genel bakış

Bu model kedi ve köpek görüntülerini birbirinden ayırır. Bu MobileNetV2 mimarisini (kullanır https://arxiv.org/abs/1801.04381 ) ve Köpekler veri kümesi vs Kediler (üzerinde eğitilmiştir https://www.tensorflow.org/datasets/catalog/cats_vs_dogs ). Bu model, hem Kedi hem de Köpek görüntülerinde yüksek doğrulukla gerçekleştirilmiştir.

sürüm

isim: v1.0

tarih: 28/08/2020

Sahipler

  • Model Kartları Ekibi, model-cards@google.com

lisanslar

  • Apache-2.0

Referanslar

alıntılar

Hususlar

Kullanım Durumları

  • Bu model, kedi ve köpek görüntülerini sınıflandırır.

sınırlamalar

  • Bu model diğer sınıfların görüntülerini sınıflandıramaz.

Etik Hususlar

  • Risk: Kediler ve köpekler arasında ayrım yapmanın genellikle makine öğreniminin iyi huylu bir uygulaması olduğu kabul edilse de, model kedi veya köpek içermeyen görüntüleri sınıflandırmaya çalıştığında zararlı sonuçlar ortaya çıkabilir.
    • Azaltma Stratejisi: Köpek ve kedi olmayan görüntülerde uygulamadan kaçının.

grafik

Doğrulama Kümesi Boyutu

Kesinlik

Metrikler

İsim Değer
kesinlik 0.981249988079071
doğruluk, kedi 0.9932885766029358
doğruluk, Köpek 0.9707602262496948