Demo bộ công cụ thẻ mẫu độc lập

Máy tính xách tay "độc lập" này sử dụng Bộ công cụ thẻ mẫu mà không có ngữ cảnh TFX / MLMD. Để tìm hiểu làm thế nào để sử dụng mẫu thẻ Toolkit với TFX / MLMD, hãy kiểm tra MLMD Mẫu Thẻ Toolkit Demo .

Xem trên TensorFlow.org Chạy trong Google Colab Xem trên GitHub Tải xuống sổ ghi chép

Khách quan

Sổ tay này trình bày cách tạo Thẻ mô hình bằng Bộ công cụ thẻ mô hình trong môi trường Jupyter / Colab. Bạn có thể tìm hiểu thêm về thẻ mô hình tại https://modelcards.withgoogle.com/about

Chúng tôi đang sử dụng mô hình Keras trong bản demo này. Nhưng logic bên dưới cũng áp dụng cho các khuôn khổ ML khác nói chung.

Thành lập

Trước tiên, chúng ta cần a) cài đặt và nhập các gói cần thiết, và b) tải xuống dữ liệu.

Nâng cấp lên Pip 20.2 và cài đặt Bộ công cụ thẻ mẫu

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

Bạn có khởi động lại thời gian chạy không?

Nếu bạn đang sử dụng Google Colab, lần đầu tiên bạn chạy ô ở trên, bạn phải khởi động lại thời gian chạy (Runtime> Restart runtime ...). Điều này là do cách Colab tải các gói.

Nhập khẩu

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

Mô hình

Chúng tôi sẽ sử dụng một mô hình pretrained với kiến trúc dựa trên MobileNetV2 , 16 lớp mô hình phân loại hình ảnh phổ biến. Mô hình của chúng tôi đã được huấn luyện để phân biệt giữa betweens mèo và chó bằng cách sử dụng Cats vs Chó tập dữ liệu. Việc đào tạo mô hình dựa trên chuyển TensorFlow hướng dẫn học tập .

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.

Dataset

Trong tập dữ liệu mèo và chó, nhãn = 0 tương ứng với mèo trong khi nhãn = 1 tương ứng với chó.

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

Sử dụng Bộ công cụ thẻ mẫu

Khởi tạo Bộ công cụ thẻ mẫu

Bước đầu tiên là để khởi tạo một ModelCardToolkit đối tượng, trong đó duy trì tài sản bao gồm một mô hình thẻ tệp JSONtài liệu thẻ mô hình . Gọi ModelCardToolkit.scaffold_assets() để tạo ra các tài sản này và trả về một ModelCard đối tượng.

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

Chú thích thẻ mẫu

Các ModelCard đối tượng được trả về bởi scaffold_assets() có nhiều lĩnh vực có thể được chỉnh sửa trực tiếp. Các trường này được hiển thị trong tài liệu Thẻ mẫu được tạo cuối cùng. Đối với một danh sách toàn diện, xem model_card.py . Xem các tài liệu hướng dẫn để biết thêm chi tiết.

Trường văn bản

Chi tiết mô hình

model_card.model_details chứa nhiều lĩnh vực siêu dữ liệu cơ bản như name , owners , và version . Bạn có thể cung cấp một mô tả cho mô hình của bạn trong overview lĩnh vực.

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')]
Phân tích định lượng

model_card.quantitative_analysis chứa thông tin về số liệu hiệu suất của mô hình.

Dưới đây, chúng tôi tạo một số giá trị chỉ số hiệu suất tổng hợp cho một mô hình giả định được xây dựng trên tập dữ liệu của chúng tôi.

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'),
]
Cân nhắc

model_card.considerations chứa đủ điều kiện thông tin về mô hình của bạn - các trường hợp sử dụng hợp lý, là những gì hạn chế mà người dùng nên lưu ý, cân nhắc đạo đức của ứng dụng, vv là những gì là gì

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

Trường đồ thị

Phương pháp hay nhất cho một báo cáo là cung cấp thông tin về dữ liệu đào tạo của một mô hình và hiệu suất của nó trên dữ liệu đánh giá. Bộ công cụ Thẻ mô hình cho phép người dùng mã hóa thông tin này dưới dạng hình ảnh hóa, được hiển thị trong Thẻ mô hình.

model_card có ba phần cho đồ thị - model_card.model_parameters.data.train.graphics đào tạo tập dữ liệu thống kê, model_card.model_parameters.data.eval.graphics cho các thống kê đánh giá dữ liệu, và model_card.quantitative_analysis.graphics cho phân tích định lượng thực hiện mô hình.

Đồ thị được lưu trữ như base64 chuỗi . Nếu bạn có một matplotlib con số, bạn có thể chuyển đổi nó thành một chuỗi base64 với 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

Bây giờ chúng ta có thể thêm chúng vào chúng tôi 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),
]

Tạo thẻ mẫu

Hãy tạo tài liệu Thẻ mẫu. Định dạng có sẵn được lưu trữ tại model_card_toolkit / mẫu . Ở đây, chúng tôi sẽ trình bày các định dạng HTML và Markdown.

Đầu tiên, chúng ta cần phải cập nhật các ModelCardToolkit với các mới nhất ModelCard .

mct.update_model_card(model_card)

Bây giờ, ModelCardToolkit có thể tạo ra một tài liệu với mẫu thẻ 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))

Bạn cũng có thể xuất Thẻ mô hình ở các định dạng khác, chẳng hạn như 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))

Thẻ mô hình cho Mô hình MobileNetV2 được tinh chỉnh cho Mèo so với Chó

Chi tiết mô hình

Tổng quat

Mô hình này phân biệt hình ảnh con mèo và con chó. Nó sử dụng kiến trúc MobileNetV2 ( https://arxiv.org/abs/1801.04381 ) và được đào tạo trên Mèo vs chó dữ liệu ( https://www.tensorflow.org/datasets/catalog/cats_vs_dogs ). Mô hình này đã thực hiện với độ chính xác cao trên cả hình ảnh Mèo và Chó.

Phiên bản

tên: v1.0

ngày: 28/08/2020

Những chủ sở hữu

  • Nhóm mô hình thẻ, model-cards@google.com

Giấy phép

  • Apache-2.0

Người giới thiệu

Trích dẫn

Cân nhắc

Trường hợp sử dụng

  • Mô hình này phân loại hình ảnh của mèo và chó.

Hạn chế

  • Mô hình này không thể phân loại hình ảnh của các lớp khác.

Cân nhắc về đạo đức

  • Rủi ro: Mặc dù phân biệt giữa mèo và chó thường được đồng ý là một ứng dụng lành tính của học máy, nhưng kết quả có hại có thể xảy ra khi mô hình cố gắng phân loại hình ảnh không chứa mèo hoặc chó.
    • Chiến lược giảm thiểu: Tránh áp dụng trên hình ảnh không phải chó và không phải mèo.

Đồ họa

Kích thước bộ xác thực

Sự chính xác

Số liệu

Tên Giá trị
sự chính xác 0,981249988079071
độ chính xác, con mèo 0,9932885766029358
độ chính xác, con chó 0,9707602262496948