Hari Komunitas ML adalah 9 November! Bergabung dengan kami untuk update dari TensorFlow, JAX, dan lebih Pelajari lebih lanjut

Analisis Model TensorFlow

Contoh Komponen Utama TensorFlow Extended (TFX)

TensorFlow Model Analysis (TFMA) adalah library untuk melakukan evaluasi model di berbagai bagian data. TFMA melakukan perhitungannya secara terdistribusi pada sejumlah besar data menggunakan Apache Beam .

Contoh notebook colab ini menggambarkan bagaimana TFMA dapat digunakan untuk menyelidiki dan memvisualisasikan kinerja model sehubungan dengan karakteristik kumpulan data. Kami akan menggunakan model yang kami latih sebelumnya, dan sekarang Anda bisa bermain dengan hasilnya! Model yang kami latih adalah untuk Chicago Taxi Example , yang menggunakan dataset Taxi Trips yang dirilis oleh City of Chicago. Jelajahi set data lengkap di UI BigQuery .

Sebagai pemodel dan pengembang, pikirkan tentang bagaimana data ini digunakan dan potensi keuntungan dan kerugian yang dapat ditimbulkan oleh prediksi model. Model seperti ini dapat memperkuat bias dan disparitas masyarakat. Apakah fitur relevan dengan masalah yang ingin Anda pecahkan atau akan menimbulkan bias? Untuk informasi lebih lanjut, baca tentang keadilan ML .

Kolom dalam kumpulan data adalah:

pickup_community_area tarif trip_start_month
trip_start_hour trip_start_day trip_start_timestamp
pickup_latitude pickup_longitude dropoff_latitude
dropoff_longitude trip_miles pickup_sensus_trak
dropoff_sensus_trak tipe pembayaran perusahaan
perjalanan_detik dropoff_community_area tips

Instal Ekstensi 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 

Instal Analisis Model TensorFlow (TFMA)

Ini akan menarik semua dependensi, dan akan memakan waktu satu menit.

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

Sekarang Anda harus me-restart runtime sebelum menjalankan sel di bawah ini.

# 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.5.0
Beam version: 2.29.0
TFMA version: 0.31.0

Muat File

Kami akan mengunduh file tar yang memiliki semua yang kami butuhkan. Itu termasuk:

  • Dataset pelatihan dan evaluasi
  • Skema data
  • Melatih dan melayani model yang disimpan (keras dan estimator) dan mengevaluasi model yang disimpan (estimator).
# 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  25.0M      0 --:--:-- --:--:-- --:--:-- 25.0M
Here's what we downloaded:
/tmp/tmpsu298d8g:
saved_models-2.2

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

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

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

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

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

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

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

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

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

/tmp/tmpsu298d8g/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/tmpsu298d8g/saved_models-2.2/models/estimator/serving_model_dir/eval_chicago-taxi-eval:
events.out.tfevents.1591221799.my-pipeline-b57vp-237544850

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

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

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

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

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

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

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

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

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

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

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

Mengurai Skema

Di antara yang kami unduh adalah skema untuk data kami yang dibuat oleh TensorFlow Data Validation . Mari kita urai sekarang sehingga kita dapat menggunakannya dengan 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)

Gunakan Skema untuk Membuat TFRecords

Kita perlu memberikan akses TFMA ke dataset kita, jadi mari kita buat file TFRecords. Kami dapat menggunakan skema kami untuk membuatnya, karena ini memberi kami jenis yang benar untuk setiap fitur.

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/tmpsu298d8g/train_data.rio

Siapkan dan Jalankan TFMA

TFMA mendukung sejumlah tipe model yang berbeda termasuk model TF keras, model berdasarkan API tanda tangan TF2 generik, serta model berbasis TF estimator. Panduan get_started memiliki daftar lengkap jenis model yang didukung dan batasan apa pun. Untuk contoh ini kita akan menunjukkan cara mengkonfigurasi model berbasis keras serta model berbasis estimator yang disimpan sebagai EvalSavedModel . Lihat FAQ untuk contoh konfigurasi lainnya.

TFMA menyediakan dukungan untuk menghitung metrik yang digunakan pada waktu pelatihan (yaitu metrik bawaan) serta metrik yang ditentukan setelah model disimpan sebagai bagian dari pengaturan konfigurasi TFMA. Untuk pengaturan keras kami, kami akan mendemonstrasikan penambahan metrik dan plot kami secara manual sebagai bagian dari konfigurasi kami (lihat panduan metrik untuk informasi tentang metrik dan plot yang didukung). Untuk penyiapan estimator, kami akan menggunakan metrik bawaan yang disimpan dengan model. Setup kami juga mencakup sejumlah spesifikasi slicing yang dibahas secara lebih rinci di bagian berikut.

Setelah membuat tfma.EvalConfig dan tfma.EvalSharedModel kita kemudian dapat menjalankan TFMA menggunakan tfma.run_model_analysis . Ini akan membuat tfma.EvalResult yang dapat kita gunakan nanti untuk merender metrik dan plot kita.

Keras

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)
​​
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.
WARNING:absl:Tensorflow version (2.5.0) 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: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)`

Penaksir

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: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.
WARNING:absl:Tensorflow version (2.5.0) found. Note that TFMA support for TF 2.0 is currently in beta
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/tmpsu298d8g/saved_models-2.2/models/estimator/eval_model_dir/1591221811/variables/variables
INFO:tensorflow:Restoring parameters from /tmp/tmpsu298d8g/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.

Memvisualisasikan Metrik dan Plot

Sekarang setelah kita menjalankan evaluasi, mari kita lihat visualisasi kita menggunakan TFMA. Untuk contoh berikut, kami akan memvisualisasikan hasil dari menjalankan evaluasi pada model keras. Untuk melihat model berbasis estimator, perbarui eval_result untuk menunjuk pada variabel estimator_eval_result kami.

0 ayah586100

Metrik Rendering

Untuk melihat metrik, Anda menggunakan tfma.view.render_slicing_metrics

Secara default, tampilan akan menampilkan potongan Overall . Untuk melihat irisan tertentu, Anda dapat menggunakan nama kolom (dengan menyetel slicing_column ) atau memberikan tfma.SlicingSpec .

Visualisasi metrik mendukung interaksi berikut:

  • Klik dan seret untuk menggeser
  • Gulir untuk memperbesar
  • Klik kanan untuk mengatur ulang tampilan
  • Arahkan kursor ke titik data yang diinginkan untuk melihat detail selengkapnya.
  • Pilih dari empat jenis tampilan yang berbeda menggunakan pilihan di bagian bawah.

Sebagai contoh, kita akan menetapkan slicing_column untuk melihat trip_start_hour fitur dari kami sebelumnya 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', …

Ikhtisar Irisan

Visualisasi default adalah Ikhtisar Irisan ketika jumlah irisan kecil. Ini menunjukkan nilai metrik untuk setiap irisan. Karena kami telah memilih trip_start_hour atas, ini menunjukkan kepada kami metrik seperti akurasi dan AUC untuk setiap jam, yang memungkinkan kami untuk mencari masalah yang spesifik untuk beberapa jam dan bukan yang lain.

Dalam visualisasi di atas:

  • Coba trip_start_hours kolom fitur yang merupakan fitur trip_start_hours kami, dengan mengklik header kolom
  • Coba urutkan berdasarkan presisi, dan perhatikan bahwa presisi untuk beberapa jam dengan contoh adalah 0, yang mungkin mengindikasikan masalah

Bagan juga memungkinkan kita untuk memilih dan menampilkan metrik yang berbeda dalam irisan kita.

  • Coba pilih metrik yang berbeda dari menu "Tampilkan"
  • Coba pilih recall di menu "Show", dan perhatikan bahwa recall untuk beberapa jam dengan contoh adalah 0, yang mungkin mengindikasikan masalah

Dimungkinkan juga untuk menetapkan ambang batas untuk memfilter irisan dengan jumlah contoh yang lebih kecil, atau "bobot". Anda dapat mengetikkan contoh dalam jumlah minimum, atau menggunakan penggeser.

Metrik Histogram

Tampilan ini juga mendukung Metrik Histogram sebagai visualisasi alternatif, yang juga merupakan tampilan default saat jumlah irisan besar. Hasilnya akan dibagi ke dalam ember dan jumlah irisan / total bobot / keduanya dapat divisualisasikan. Kolom dapat diurutkan dengan mengklik header kolom. Irisan dengan bobot kecil dapat disaring dengan mengatur ambang batas. Pemfilteran lebih lanjut dapat diterapkan dengan menyeret pita abu-abu. Untuk mengatur ulang rentang, klik dua kali pita. Pemfilteran juga dapat digunakan untuk menghapus outlier dalam tabel visualisasi dan metrik. Klik ikon roda gigi untuk beralih ke skala logaritmik, bukan skala linier.

  • Coba pilih "Metrics Histogram" di menu Visualisasi

Lebih Banyak Irisan

tfma.EvalConfig awal kami membuat seluruh daftar slicing_specs , yang dapat kami visualisasikan dengan memperbarui informasi irisan yang diteruskan ke tfma.view.render_slicing_metrics . Di sini kita akan memilih potongan trip_start_day (hari dalam seminggu). Coba ubah trip_start_day menjadi trip_start_month dan render lagi untuk memeriksa irisan yang berbeda.

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

TFMA juga mendukung pembuatan persilangan fitur untuk menganalisis kombinasi fitur. Pengaturan awal kami membuat persilangan trip_start_hour dan 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…

Melintasi dua kolom menciptakan banyak kombinasi! Mari kita persempit salib kita hanya untuk melihat perjalanan yang dimulai pada siang hari . Kemudian mari kita pilih binary_accuracy dari visualisasi:

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…

Plot Rendering

Setiap plot yang ditambahkan ke tfma.EvalConfig pelatihan pasca metric_specs dapat ditampilkan menggunakan tfma.view.render_plot .

Seperti halnya metrik, plot dapat dilihat dengan irisan. Tidak seperti metrik, hanya plot untuk nilai irisan tertentu yang dapat ditampilkan sehingga tfma.SlicingSpec harus digunakan dan harus menentukan nama dan nilai fitur irisan. Jika tidak ada irisan yang disediakan maka plot untuk irisan Overall digunakan.

Dalam contoh di bawah ini kami menampilkan plot CalibrationPlot dan ConfusionMatrixPlot yang dihitung untuk 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…

Melacak Kinerja Model Seiring Waktu

Set data pelatihan Anda akan digunakan untuk melatih model Anda, dan diharapkan akan mewakili set data pengujian Anda dan data yang akan dikirim ke model Anda dalam produksi. Namun, meskipun data dalam permintaan inferensi mungkin tetap sama dengan data pelatihan Anda, dalam banyak kasus data tersebut akan mulai cukup berubah sehingga kinerja model Anda akan berubah.

Itu berarti Anda perlu memantau dan mengukur kinerja model Anda secara berkelanjutan, sehingga Anda dapat menyadari dan bereaksi terhadap perubahan. Mari kita lihat bagaimana TFMA dapat membantu.

Mari kita memuat 3 model yang berbeda berjalan dan menggunakan TFMA untuk melihat bagaimana perbandingannya menggunakan 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: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.
WARNING:absl:Tensorflow version (2.5.0) found. Note that TFMA support for TF 2.0 is currently in beta
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.
WARNING:absl:Tensorflow version (2.5.0) found. Note that TFMA support for TF 2.0 is currently in beta
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.
WARNING:absl:Tensorflow version (2.5.0) found. Note that TFMA support for TF 2.0 is currently in beta

Pertama, kami akan membayangkan bahwa kami telah melatih dan menerapkan model kami kemarin, dan sekarang kami ingin melihat bagaimana kinerjanya pada data baru yang masuk hari ini. Visualisasi akan dimulai dengan menampilkan AUC. Dari UI Anda dapat:

  • Tambahkan metrik lain menggunakan menu "Tambahkan rangkaian metrik".
  • Tutup grafik yang tidak diinginkan dengan mengklik x
  • Arahkan kursor ke titik data (ujung segmen garis dalam grafik) untuk mendapatkan detail lebih lanjut
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…

Sekarang kita akan membayangkan bahwa hari lain telah berlalu dan kita ingin melihat bagaimana kinerjanya pada data baru yang masuk hari ini, dibandingkan dengan dua hari sebelumnya:

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…

Validasi Model

TFMA dapat dikonfigurasi untuk mengevaluasi beberapa model secara bersamaan. Biasanya ini dilakukan untuk membandingkan model baru dengan baseline (seperti model yang saat ini ditayangkan) untuk menentukan perbedaan kinerja dalam metrik (misalnya AUC, dll) yang relatif terhadap baseline. Ketika ambang batas dikonfigurasi, TFMA akan menghasilkan catatan tfma.ValidationResult menunjukkan apakah kinerja sesuai dengan harapan.

Mari kita konfigurasi ulang evaluasi keras kita untuk membandingkan dua model: sebuah kandidat dan sebuah baseline. Kami juga akan memvalidasi kinerja kandidat terhadap baseline dengan menetapkan tmfa.MetricThreshold pada metrik 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: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.
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.
WARNING:absl:Tensorflow version (2.5.0) found. Note that TFMA support for TF 2.0 is currently in beta

Saat menjalankan evaluasi dengan satu atau beberapa model terhadap baseline, TFMA secara otomatis menambahkan metrik yang berbeda untuk semua metrik yang dihitung selama evaluasi. Metrik ini dinamai menurut metrik yang sesuai tetapi dengan _diff ditambahkan ke nama metrik.

Mari kita lihat metrik yang dihasilkan oleh lari kami:

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

Sekarang mari kita lihat output dari pemeriksaan validasi kita. Untuk melihat hasil validasi kita menggunakantfma.load_validator_result . Untuk contoh kami, validasi gagal karena AUC di bawah ambang batas.

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