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 JSON và tà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)
# 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)
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 |