تجزیه و تحلیل مدل TensorFlow

نمونه ای از مولفه کلیدی TensorFlow Extended (TFX)

TensorFlow مدل تجزیه و تحلیل (TFMA) یک کتابخانه برای انجام ارزیابی مدل در برش های مختلف از داده است. TFMA به صورت توزیع شده بیش از مقادیر زیادی از داده ها با استفاده محاسبات خود آپاچی پرتو .

این نمونه نوت بوک colab نشان می دهد که چگونه می توان از TFMA برای بررسی و تجسم عملکرد یک مدل با توجه به ویژگی های مجموعه داده استفاده کرد. ما از مدلی استفاده خواهیم کرد که قبلا آموزش داده بودیم، و اکنون شما می توانید با نتایج بازی کنید! مدل ما به آموزش دیده برای بود شیکاگو تاکسی به عنوان مثال ، که با استفاده از تاکسی سفر مجموعه داده های منتشر شده توسط شهر شیکاگو. کاوش در مجموعه داده کامل در UI BigQuery مشاهده .

به‌عنوان یک مدل‌ساز و توسعه‌دهنده، به این فکر کنید که چگونه از این داده‌ها استفاده می‌شود و مزایای بالقوه و آسیب‌هایی که پیش‌بینی‌های یک مدل می‌تواند ایجاد کند. مدلی مانند این می تواند تعصبات و نابرابری های اجتماعی را تقویت کند. آیا یک ویژگی با مشکلی که می‌خواهید حل کنید مرتبط است یا سوگیری ایجاد می‌کند؟ برای اطلاعات بیشتر، در مورد به عنوان خوانده شده انصاف ML .

ستون های مجموعه داده عبارتند از:

pickup_community_area کرایه سفر_شروع_ماه
سفر_شروع_ساعت سفر_شروع_روز trip_start_timestamp
pickup_latitude طول_وصول dropoff_latitude
افت_طول جغرافیایی trip_miles پیکاپ_سرشماری_تراکت
dropoff_sensus_tract نوع پرداخت شرکت
سفر_ثانیه dropoff_community_area نکات

برنامه های افزودنی Jupyter را نصب کنید

jupyter nbextension enable --py widgetsnbextension --sys-prefix 
jupyter nbextension install --py --symlink tensorflow_model_analysis --sys-prefix 
jupyter nbextension enable --py tensorflow_model_analysis --sys-prefix 

نصب تحلیل مدل TensorFlow (TFMA)

این همه وابستگی ها را جذب می کند و یک دقیقه طول می کشد.

# Upgrade pip to the latest, and install TFMA.
pip install -U pip
pip install tensorflow-model-analysis

اکنون باید قبل از اجرای سلول های زیر، زمان اجرا را مجدداً راه اندازی کنید.

# This setup was tested with TF 2.5 and TFMA 0.31 (using colab), but it should
# also work with the latest release.
import sys

# Confirm that we're using Python 3
assert sys.version_info.major==3, 'This notebook must be run using Python 3.'

import tensorflow as tf
print('TF version: {}'.format(tf.__version__))
import apache_beam as beam
print('Beam version: {}'.format(beam.__version__))
import tensorflow_model_analysis as tfma
print('TFMA version: {}'.format(tfma.__version__))
TF version: 2.4.4
Beam version: 2.34.0
TFMA version: 0.29.0

فایل ها را بارگیری کنید

ما یک فایل tar را دانلود می کنیم که همه چیز مورد نیاز ما را دارد. که شامل:

  • مجموعه داده های آموزش و ارزیابی
  • طرح واره داده
  • آموزش و سرویس مدل های ذخیره شده (کراس و تخمینگر) و مدل های ذخیره شده ایوال (برآورنده).
# Download the tar file from GCP and extract it
import io, os, tempfile
TAR_NAME = 'saved_models-2.2'
BASE_DIR = tempfile.mkdtemp()
DATA_DIR = os.path.join(BASE_DIR, TAR_NAME, 'data')
MODELS_DIR = os.path.join(BASE_DIR, TAR_NAME, 'models')
SCHEMA = os.path.join(BASE_DIR, TAR_NAME, 'schema.pbtxt')
OUTPUT_DIR = os.path.join(BASE_DIR, 'output')

!curl -O https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/{TAR_NAME}.tar
!tar xf {TAR_NAME}.tar
!mv {TAR_NAME} {BASE_DIR}
!rm {TAR_NAME}.tar

print("Here's what we downloaded:")
!ls -R {BASE_DIR}
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 6800k  100 6800k    0     0  28.2M      0 --:--:-- --:--:-- --:--:-- 28.2M
Here's what we downloaded:
/tmp/tmp_at9q62d:
saved_models-2.2

/tmp/tmp_at9q62d/saved_models-2.2:
data  models  schema.pbtxt

/tmp/tmp_at9q62d/saved_models-2.2/data:
eval  train

/tmp/tmp_at9q62d/saved_models-2.2/data/eval:
data.csv

/tmp/tmp_at9q62d/saved_models-2.2/data/train:
data.csv

/tmp/tmp_at9q62d/saved_models-2.2/models:
estimator  keras

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator:
eval_model_dir  serving_model_dir

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/eval_model_dir:
1591221811

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/eval_model_dir/1591221811:
saved_model.pb  tmp.pbtxt  variables

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/eval_model_dir/1591221811/variables:
variables.data-00000-of-00001  variables.index

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/serving_model_dir:
checkpoint
eval_chicago-taxi-eval
events.out.tfevents.1591221780.my-pipeline-b57vp-237544850
export
graph.pbtxt
model.ckpt-100.data-00000-of-00001
model.ckpt-100.index
model.ckpt-100.meta

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/serving_model_dir/eval_chicago-taxi-eval:
events.out.tfevents.1591221799.my-pipeline-b57vp-237544850

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/serving_model_dir/export:
chicago-taxi

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/serving_model_dir/export/chicago-taxi:
1591221801

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/serving_model_dir/export/chicago-taxi/1591221801:
saved_model.pb  variables

/tmp/tmp_at9q62d/saved_models-2.2/models/estimator/serving_model_dir/export/chicago-taxi/1591221801/variables:
variables.data-00000-of-00001  variables.index

/tmp/tmp_at9q62d/saved_models-2.2/models/keras:
0  1  2

/tmp/tmp_at9q62d/saved_models-2.2/models/keras/0:
saved_model.pb  variables

/tmp/tmp_at9q62d/saved_models-2.2/models/keras/0/variables:
variables.data-00000-of-00001  variables.index

/tmp/tmp_at9q62d/saved_models-2.2/models/keras/1:
saved_model.pb  variables

/tmp/tmp_at9q62d/saved_models-2.2/models/keras/1/variables:
variables.data-00000-of-00001  variables.index

/tmp/tmp_at9q62d/saved_models-2.2/models/keras/2:
saved_model.pb  variables

/tmp/tmp_at9q62d/saved_models-2.2/models/keras/2/variables:
variables.data-00000-of-00001  variables.index

طرحواره را تجزیه کنید

از جمله چیزهایی که ما دانلود یک طرح برای داده های ما که با ایجاد شد TensorFlow داده ها اعتبار . حالا بیایید آن را تجزیه کنیم تا بتوانیم با TFMA از آن استفاده کنیم.

import tensorflow as tf
from google.protobuf import text_format
from tensorflow.python.lib.io import file_io
from tensorflow_metadata.proto.v0 import schema_pb2
from tensorflow.core.example import example_pb2

schema = schema_pb2.Schema()
contents = file_io.read_file_to_string(SCHEMA)
schema = text_format.Parse(contents, schema)

از Schema برای ایجاد TFRecords استفاده کنید

ما باید به TFMA دسترسی به مجموعه داده خود بدهیم، بنابراین بیایید یک فایل TFRecords ایجاد کنیم. ما می‌توانیم از طرحواره خود برای ایجاد آن استفاده کنیم، زیرا نوع صحیح هر ویژگی را به ما می‌دهد.

import csv

datafile = os.path.join(DATA_DIR, 'eval', 'data.csv')
reader = csv.DictReader(open(datafile, 'r'))
examples = []
for line in reader:
  example = example_pb2.Example()
  for feature in schema.feature:
    key = feature.name
    if feature.type == schema_pb2.FLOAT:
      example.features.feature[key].float_list.value[:] = (
          [float(line[key])] if len(line[key]) > 0 else [])
    elif feature.type == schema_pb2.INT:
      example.features.feature[key].int64_list.value[:] = (
          [int(line[key])] if len(line[key]) > 0 else [])
    elif feature.type == schema_pb2.BYTES:
      example.features.feature[key].bytes_list.value[:] = (
          [line[key].encode('utf8')] if len(line[key]) > 0 else [])
  # Add a new column 'big_tipper' that indicates if tips was > 20% of the fare. 
  # TODO(b/157064428): Remove after label transformation is supported for Keras.
  big_tipper = float(line['tips']) > float(line['fare']) * 0.2
  example.features.feature['big_tipper'].float_list.value[:] = [big_tipper]
  examples.append(example)

tfrecord_file = os.path.join(BASE_DIR, 'train_data.rio')
with tf.io.TFRecordWriter(tfrecord_file) as writer:
  for example in examples:
    writer.write(example.SerializeToString())

!ls {tfrecord_file}
/tmp/tmp_at9q62d/train_data.rio

راه اندازی و اجرای TFMA

TFMA از انواع مدل‌های مختلف از جمله مدل‌های TF keras، مدل‌های مبتنی بر APIهای امضای TF2 عمومی و همچنین مدل‌های مبتنی بر برآوردگر TF پشتیبانی می‌کند. get_started راهنما دارای لیست کاملی از انواع مدل پشتیبانی و هیچ گونه محدودیت. در این مثال ما در حال رفتن به نشان دهد که چگونه برای پیکربندی یک keras مدل مبتنی بر به عنوان یک مدل مبتنی بر برآوردگر که به عنوان یک ذخیره شد EvalSavedModel . مراجعه کنید پرسش و پاسخ برای نمونه هایی از تنظیمات دیگر.

TFMA از محاسبه معیارهایی که در زمان آموزش استفاده شده اند (یعنی معیارهای داخلی) و همچنین معیارهایی که پس از ذخیره مدل به عنوان بخشی از تنظیمات پیکربندی TFMA تعریف شده اند، پشتیبانی می کند. برای keras ما راه اندازی ما نشان می دهد که اضافه کردن معیارهای و توطئه های ما به صورت دستی به عنوان بخشی از پیکربندی (نگاه کنید به معیارهای راهنمای برای اطلاعات در مورد معیارهای و توطئه های که پشتیبانی می شوند). برای راه‌اندازی تخمین‌گر، از معیارهای داخلی که با مدل ذخیره شده‌اند استفاده می‌کنیم. تنظیمات ما همچنین شامل تعدادی مشخصات برش است که در بخش‌های بعدی با جزئیات بیشتر مورد بحث قرار می‌گیرند.

پس از ایجاد یک tfma.EvalConfig و tfma.EvalSharedModel ما پس از آن می توانید با استفاده از TFMA اجرا tfma.run_model_analysis . این یک ایجاد tfma.EvalResult که ما می توانیم بعد برای ارائه معیارهای و توطئه های ما استفاده کنید.

کراس

import tensorflow_model_analysis as tfma

# Setup tfma.EvalConfig settings
keras_eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # For keras (and serving models) we need to add a `label_key`.
    label_key: "big_tipper"
  }

  ## Post training metric information. These will be merged with any built-in
  ## metrics from training.
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "BinaryAccuracy" }
    metrics { class_name: "BinaryCrossentropy" }
    metrics { class_name: "AUC" }
    metrics { class_name: "AUCPrecisionRecall" }
    metrics { class_name: "Precision" }
    metrics { class_name: "Recall" }
    metrics { class_name: "MeanLabel" }
    metrics { class_name: "MeanPrediction" }
    metrics { class_name: "Calibration" }
    metrics { class_name: "CalibrationPlot" }
    metrics { class_name: "ConfusionMatrixPlot" }
    # ... add additional metrics and plots ...
  }

  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["trip_start_hour"]
  }
  slicing_specs {
    feature_keys: ["trip_start_day"]
  }
  slicing_specs {
    feature_values: {
      key: "trip_start_month"
      value: "1"
    }
  }
  slicing_specs {
    feature_keys: ["trip_start_hour", "trip_start_day"]
  }
""", tfma.EvalConfig())

# Create a tfma.EvalSharedModel that points at our keras model.
keras_model_path = os.path.join(MODELS_DIR, 'keras', '2')
keras_eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path=keras_model_path,
    eval_config=keras_eval_config)

keras_output_path = os.path.join(OUTPUT_DIR, 'keras')

# Run TFMA
keras_eval_result = tfma.run_model_analysis(
    eval_shared_model=keras_eval_shared_model,
    eval_config=keras_eval_config,
    data_location=tfrecord_file,
    output_path=keras_output_path)
2021-12-04 10:18:15.463173: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcusolver.so.10'; dlerror: libcusolver.so.10: cannot open shared object file: No such file or directory
2021-12-04 10:18:15.464249: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1757] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...
WARNING:absl:Tensorflow version (2.4.4) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:apache_beam.runners.interactive.interactive_environment:Dependencies required for Interactive Beam PCollection visualization are not available, please use: `pip install apache-beam[interactive]` to install necessary dependencies to enable all data visualization features.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:113: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:113: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

برآوردگر

import tensorflow_model_analysis as tfma

# Setup tfma.EvalConfig settings
estimator_eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # To use EvalSavedModel set `signature_name` to "eval".
    signature_name: "eval"
  }

  ## Post training metric information. These will be merged with any built-in
  ## metrics from training.
  metrics_specs {
    metrics { class_name: "ConfusionMatrixPlot" }
    # ... add additional metrics and plots ...
  }

  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["trip_start_hour"]
  }
  slicing_specs {
    feature_keys: ["trip_start_day"]
  }
  slicing_specs {
    feature_values: {
      key: "trip_start_month"
      value: "1"
    }
  }
  slicing_specs {
    feature_keys: ["trip_start_hour", "trip_start_day"]
  }
""", tfma.EvalConfig())

# Create a tfma.EvalSharedModel that points at our eval saved model.
estimator_base_model_path = os.path.join(
    MODELS_DIR, 'estimator', 'eval_model_dir')
estimator_model_path = os.path.join(
    estimator_base_model_path, os.listdir(estimator_base_model_path)[0])
estimator_eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path=estimator_model_path,
    eval_config=estimator_eval_config)

estimator_output_path = os.path.join(OUTPUT_DIR, 'estimator')

# Run TFMA
estimator_eval_result = tfma.run_model_analysis(
    eval_shared_model=estimator_eval_shared_model,
    eval_config=estimator_eval_config,
    data_location=tfrecord_file,
    output_path=estimator_output_path)
WARNING:absl:Tensorflow version (2.4.4) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/eval_saved_model/load.py:169: load (from tensorflow.python.saved_model.loader_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.loader.load or tf.compat.v1.saved_model.load. There will be a new function for importing SavedModels in Tensorflow 2.0.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/eval_saved_model/load.py:169: load (from tensorflow.python.saved_model.loader_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.loader.load or tf.compat.v1.saved_model.load. There will be a new function for importing SavedModels in Tensorflow 2.0.
INFO:tensorflow:Restoring parameters from /tmp/tmp_at9q62d/saved_models-2.2/models/estimator/eval_model_dir/1591221811/variables/variables
INFO:tensorflow:Restoring parameters from /tmp/tmp_at9q62d/saved_models-2.2/models/estimator/eval_model_dir/1591221811/variables/variables
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/eval_saved_model/graph_ref.py:189: get_tensor_from_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.get_tensor_from_tensor_info or tf.compat.v1.saved_model.get_tensor_from_tensor_info.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/eval_saved_model/graph_ref.py:189: get_tensor_from_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.get_tensor_from_tensor_info or tf.compat.v1.saved_model.get_tensor_from_tensor_info.

تجسم متریک ها و نمودارها

اکنون که ارزیابی را اجرا کردیم، بیایید نگاهی به تجسم های خود با استفاده از TFMA بیندازیم. برای مثال‌های زیر، نتایج حاصل از اجرای ارزیابی روی مدل keras را تجسم خواهیم کرد. برای مشاهده برآوردگر بر اساس مدل به روز رسانی eval_result به نقطه در ما estimator_eval_result متغیر است.

eval_result = keras_eval_result
# eval_result = estimator_eval_result

معیارهای رندرینگ

برای مشاهده معیارهای شما استفاده از tfma.view.render_slicing_metrics

به طور پیش فرض نمایش خواهد نمایش Overall برش. برای مشاهده یک برش خاص شما هم می توانید نام ستون (با تنظیم استفاده slicing_column ) و یا ارائه یک tfma.SlicingSpec .

تجسم متریک از تعاملات زیر پشتیبانی می کند:

  • کلیک کنید و بکشید تا حرکت کنید
  • برای بزرگنمایی اسکرول کنید
  • برای بازنشانی نما کلیک راست کنید
  • برای مشاهده جزئیات بیشتر، نشانگر را روی نقطه داده مورد نظر نگه دارید.
  • با استفاده از گزینه های موجود در پایین، از چهار نوع نمای مختلف انتخاب کنید.

به عنوان مثال، ما می شود تنظیم slicing_column به در نگاه trip_start_hour ویژگی از قبلی ما slicing_specs .

tfma.view.render_slicing_metrics(eval_result, slicing_column='trip_start_hour')
SlicingMetricsViewer(config={'weightedExamplesColumn': 'example_count'}, data=[{'slice': 'trip_start_hour:2', …

بررسی اجمالی برش ها

تجسم پیش فرض برش نمای کلی است که تعداد برش کوچک است. مقادیر معیارها را برای هر برش نشان می دهد. از آنجا که ما را انتخاب کرده اید trip_start_hour بالا، آن را به ما نشان معیارهای مانند دقت و AUC برای هر ساعت، که اجازه می دهد تا ما را به برای مسائل هستند که خاص به چند ساعت و نه دیگران نگاه کنید.

در تجسم بالا:

  • سعی کنید مرتب سازی ستون ویژگی است که ما trip_start_hours ویژگی، با کلیک کردن بر روی عنوان ستون
  • سعی کنید مرتب سازی بر اساس دقت و توجه کنید که دقت برای برخی از ساعت با نمونه 0 است، که ممکن است یک مشکل نشان می دهد

نمودار همچنین به ما امکان می دهد معیارهای مختلفی را در برش های خود انتخاب و نمایش دهیم.

  • معیارهای مختلف را از منوی «نمایش» انتخاب کنید
  • سعی کنید انتخاب فراخوان در "نمایش" منو، و توجه کنید که فراخوان برای برخی از ساعت با نمونه های 0، که ممکن است نشان دهنده یک مشکل است

همچنین می توان آستانه ای برای فیلتر کردن برش هایی با تعداد نمونه های کوچکتر یا "وزن" تعیین کرد. می توانید حداقل تعداد نمونه را تایپ کنید یا از نوار لغزنده استفاده کنید.

هیستوگرام متریک

این دیدگاه همچنین پشتیبانی از متریک هیستوگرام به عنوان یک تجسم جایگزین، که آن هم به نمای پیش فرض زمانی که تعدادی از برش بزرگ است. نتایج به سطل ها تقسیم می شود و تعداد برش ها / وزن کل / هر دو قابل مشاهده است. ستون ها را می توان با کلیک بر روی عنوان ستون مرتب کرد. برش هایی با وزن های کوچک را می توان با تنظیم آستانه فیلتر کرد. فیلتر بیشتر را می توان با کشیدن نوار خاکستری اعمال کرد. برای بازنشانی محدوده، روی باند دوبار کلیک کنید. همچنین می توان از فیلتر کردن برای حذف موارد پرت در جداول تجسم و معیارها استفاده کرد. روی نماد چرخ دنده کلیک کنید تا به جای مقیاس خطی به مقیاس لگاریتمی تغییر دهید.

  • سعی کنید "Metrics Histogram" را در منوی Visualization انتخاب کنید

برش های بیشتر

اولیه ما tfma.EvalConfig یک لیست کامل از ایجاد slicing_specs ، که ما می توانیم با اطلاعات به روز رسانی تکه گذشت به تجسم tfma.view.render_slicing_metrics . در اینجا، ما را انتخاب کنید trip_start_day تکه (روزهای هفته). سعی کنید تغییر trip_start_day به trip_start_month و رندر دوباره به بررسی برش متفاوت است.

tfma.view.render_slicing_metrics(eval_result, slicing_column='trip_start_day')
SlicingMetricsViewer(config={'weightedExamplesColumn': 'example_count'}, data=[{'slice': 'trip_start_day:3', '…

TFMA همچنین از ایجاد تلاقی ویژگی ها برای تجزیه و تحلیل ترکیبی از ویژگی ها پشتیبانی می کند. تنظیمات اصلی ما ایجاد یک صلیب trip_start_hour و trip_start_day :

tfma.view.render_slicing_metrics(
    eval_result,
    slicing_spec=tfma.SlicingSpec(
        feature_keys=['trip_start_hour', 'trip_start_day']))
SlicingMetricsViewer(config={'weightedExamplesColumn': 'example_count'}, data=[{'slice': 'trip_start_day_X_tri…

عبور از دو ستون ترکیب های زیادی ایجاد می کند! بیایید محدود کردن متقابل ما تنها نگاه سفرهایی که در ظهر شروع می شود. انتخاب کنید و سپس اجازه دهید binary_accuracy از تجسم:

tfma.view.render_slicing_metrics(
    eval_result,
    slicing_spec=tfma.SlicingSpec(
        feature_keys=['trip_start_day'], feature_values={'trip_start_hour': '12'}))
SlicingMetricsViewer(config={'weightedExamplesColumn': 'example_count'}, data=[{'slice': 'trip_start_day_X_tri…

رندر پلات

هر توطئه که به آن اضافه شد tfma.EvalConfig آموزش ارسال metric_specs می توان با استفاده نمایش داده tfma.view.render_plot .

همانند معیارها، نمودارها را می توان به صورت تکه ای مشاهده کرد. بر خلاف معیارهای، تنها توطئه برای یک مقدار برش خاص نمایش داده می شود به طوری که tfma.SlicingSpec باید استفاده شود و باید آن را هر دو نام یک ویژگی تکه و ارزش را مشخص کنید. اگر هیچ تکه پس از آن ارائه شده است توطئه برای Overall تکه استفاده شده است.

در مثال زیر ما نمایش CalibrationPlot و ConfusionMatrixPlot توطئه که برای محاسبه شد trip_start_hour:1 برش.

tfma.view.render_plot(
    eval_result,
    tfma.SlicingSpec(feature_values={'trip_start_hour': '1'}))
PlotViewer(config={'sliceName': 'trip_start_hour:1', 'metricKeys': {'calibrationPlot': {'metricName': 'calibra…

ردیابی عملکرد مدل در طول زمان

مجموعه داده های آموزشی شما برای آموزش مدل شما استفاده خواهد شد و امیدواریم نماینده مجموعه داده های آزمایشی شما و داده هایی باشد که در تولید به مدل شما ارسال می شود. با این حال، در حالی که داده‌های درخواست‌های استنتاج ممکن است مانند داده‌های آموزشی شما باقی بمانند، در بسیاری از موارد به اندازه کافی شروع به تغییر می‌کنند تا عملکرد مدل شما تغییر کند.

این بدان معناست که شما باید عملکرد مدل خود را به طور مداوم نظارت و اندازه گیری کنید تا بتوانید از تغییرات آگاه باشید و نسبت به آن واکنش نشان دهید. بیایید نگاهی به نحوه کمک TFMA بیندازیم.

بیایید بار 3 اجرا می شود مدل های مختلف و استفاده TFMA به دیدن آنها چگونه با استفاده از مقایسه render_time_series .

# Note this re-uses the EvalConfig from the keras setup.

# Run eval on each saved model
output_paths = []
for i in range(3):
  # Create a tfma.EvalSharedModel that points at our saved model.
  eval_shared_model = tfma.default_eval_shared_model(
      eval_saved_model_path=os.path.join(MODELS_DIR, 'keras', str(i)),
      eval_config=keras_eval_config)

  output_path = os.path.join(OUTPUT_DIR, 'time_series', str(i))
  output_paths.append(output_path)

  # Run TFMA
  tfma.run_model_analysis(eval_shared_model=eval_shared_model,
                          eval_config=keras_eval_config,
                          data_location=tfrecord_file,
                          output_path=output_path)
WARNING:absl:Tensorflow version (2.4.4) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
WARNING:absl:Tensorflow version (2.4.4) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
WARNING:absl:Tensorflow version (2.4.4) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.

ابتدا، تصور می کنیم که دیروز مدل خود را آموزش داده و به کار گرفته ایم، و اکنون می خواهیم ببینیم که در داده های جدیدی که امروز وارد می شود، چگونه عمل می کند. تجسم با نمایش AUC شروع می شود. از UI می توانید:

  • با استفاده از منوی «افزودن سری متریک» معیارهای دیگر را اضافه کنید.
  • نمودارهای ناخواسته را با کلیک بر روی x ببندید
  • برای دریافت جزئیات بیشتر، نشانگر را روی نقاط داده (انتهای بخش‌های خط در نمودار) نگه دارید
eval_results_from_disk = tfma.load_eval_results(output_paths[:2])

tfma.view.render_time_series(eval_results_from_disk)
TimeSeriesViewer(config={'isModelCentric': True}, data=[{'metrics': {'': {'': {'binary_accuracy': {'doubleValu…

حالا تصور می‌کنیم که یک روز دیگر گذشته است و می‌خواهیم ببینیم که در داده‌های جدیدی که امروز می‌آیند، در مقایسه با دو روز قبل چگونه عمل می‌کند:

eval_results_from_disk = tfma.load_eval_results(output_paths)

tfma.view.render_time_series(eval_results_from_disk)
TimeSeriesViewer(config={'isModelCentric': True}, data=[{'metrics': {'': {'': {'binary_accuracy': {'doubleValu…

اعتبار سنجی مدل

TFMA را می توان برای ارزیابی چندین مدل به طور همزمان پیکربندی کرد. معمولاً این کار برای مقایسه یک مدل جدید با خط مبنا (مانند مدل در حال ارائه) انجام می‌شود تا مشخص شود که تفاوت عملکرد در معیارها (مثلاً AUC و غیره) نسبت به خط پایه چیست. هنگامی که آستانه پیکربندی، TFMA یک تولید tfma.ValidationResult رکورد نشان می دهد که آیا عملکرد منطبق expecations.

بیایید ارزیابی keras خود را برای مقایسه دو مدل مجدداً پیکربندی کنیم: یک نامزد و یک خط پایه. ما همچنین عملکرد نامزد در برابر پایه با تنظیم یک اعتبار tmfa.MetricThreshold در متریک AUC است.

# Setup tfma.EvalConfig setting
eval_config_with_thresholds = text_format.Parse("""
  ## Model information
  model_specs {
    name: "candidate"
    # For keras we need to add a `label_key`.
    label_key: "big_tipper"
  }
  model_specs {
    name: "baseline"
    # For keras we need to add a `label_key`.
    label_key: "big_tipper"
    is_baseline: true
  }

  ## Post training metric information
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "BinaryAccuracy" }
    metrics { class_name: "BinaryCrossentropy" }
    metrics {
      class_name: "AUC"
      threshold {
        # Ensure that AUC is always > 0.9
        value_threshold {
          lower_bound { value: 0.9 }
        }
        # Ensure that AUC does not drop by more than a small epsilon
        # e.g. (candidate - baseline) > -1e-10 or candidate > baseline - 1e-10
        change_threshold {
          direction: HIGHER_IS_BETTER
          absolute { value: -1e-10 }
        }
      }
    }
    metrics { class_name: "AUCPrecisionRecall" }
    metrics { class_name: "Precision" }
    metrics { class_name: "Recall" }
    metrics { class_name: "MeanLabel" }
    metrics { class_name: "MeanPrediction" }
    metrics { class_name: "Calibration" }
    metrics { class_name: "CalibrationPlot" }
    metrics { class_name: "ConfusionMatrixPlot" }
    # ... add additional metrics and plots ...
  }

  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["trip_start_hour"]
  }
  slicing_specs {
    feature_keys: ["trip_start_day"]
  }
  slicing_specs {
    feature_keys: ["trip_start_month"]
  }
  slicing_specs {
    feature_keys: ["trip_start_hour", "trip_start_day"]
  }
""", tfma.EvalConfig())

# Create tfma.EvalSharedModels that point at our keras models.
candidate_model_path = os.path.join(MODELS_DIR, 'keras', '2')
baseline_model_path = os.path.join(MODELS_DIR, 'keras', '1')
eval_shared_models = [
  tfma.default_eval_shared_model(
      model_name=tfma.CANDIDATE_KEY,
      eval_saved_model_path=candidate_model_path,
      eval_config=eval_config_with_thresholds),
  tfma.default_eval_shared_model(
      model_name=tfma.BASELINE_KEY,
      eval_saved_model_path=baseline_model_path,
      eval_config=eval_config_with_thresholds),
]

validation_output_path = os.path.join(OUTPUT_DIR, 'validation')

# Run TFMA
eval_result_with_validation = tfma.run_model_analysis(
    eval_shared_models,
    eval_config=eval_config_with_thresholds,
    data_location=tfrecord_file,
    output_path=validation_output_path)
WARNING:absl:Tensorflow version (2.4.4) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.

هنگام اجرای ارزیابی‌ها با یک یا چند مدل بر اساس خط پایه، TFMA به‌طور خودکار معیارهای متفاوتی را برای تمام معیارهای محاسبه‌شده در طول ارزیابی اضافه می‌کند. این معیارها پس از متناظر متریک اما با نام _diff افزوده به نام متریک.

بیایید به معیارهای تولید شده توسط اجرای خود نگاهی بیندازیم:

tfma.view.render_time_series(eval_result_with_validation)
TimeSeriesViewer(config={'isModelCentric': True}, data=[{'metrics': {'': {'': {'binary_accuracy': {'doubleValu…

اکنون به خروجی بررسی های اعتبارسنجی خود نگاه می کنیم. برای مشاهده نتایج اعتبار سنجی استفاده می کنیم tfma.load_validator_result . برای مثال ما، اعتبارسنجی ناموفق است زیرا AUC زیر آستانه است.

validation_result = tfma.load_validation_result(validation_output_path)
print(validation_result.validation_ok)
False