TensorFlow Model Analizi

TensorFlow Extended (TFX) Anahtar Bileşenine Bir Örnek

TensorFlow Modeli Analizi (TFMA) farklı veri dilimleri üzerinde bir model değerlendirme yapmak için bir kütüphanedir. TFMA kullanılarak büyük miktarda veri üzerinde dağıtılmış bir biçimde hesaplamalar yapar Apache yaygı .

Bu örnek ortak çalışma defteri, veri kümesinin özelliklerine göre bir modelin performansını araştırmak ve görselleştirmek için TFMA'nın nasıl kullanılabileceğini gösterir. Daha önce eğittiğimiz bir modeli kullanacağız ve şimdi sonuçlarla oynayacaksın! Biz eğitimli modeli oldu Chicago Taksi Örnek kullanır, Taksi veri kümesi Gezileri Chicago City yayınladı. Tam veri kümesini keşfedin BigQuery UI .

Bir modelleyici ve geliştirici olarak, bu verilerin nasıl kullanıldığını ve bir modelin tahminlerinin neden olabileceği potansiyel faydaları ve zararları düşünün. Bunun gibi bir model toplumsal önyargıları ve eşitsizlikleri güçlendirebilir. Çözmek istediğiniz sorunla ilgili bir özellik mi yoksa önyargıya neden olacak mı? Daha fazla bilgi için, hakkında okumak ML adalet .

Veri kümesindeki sütunlar şunlardır:

pickup_community_area Ücret trip_start_month
trip_start_hour trip_start_day trip_start_timestamp
pickup_latitude pickup_longitude dropoff_latitude
dropoff_longitude trip_miles pickup_census_tract
dropoff_census_tract ödeme şekli şirket
trip_saniye dropoff_community_area ipuçları

Jupyter Uzantılarını Yükleyin

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 Model Analizini (TFMA) yükleyin

Bu, tüm bağımlılıkları çekecek ve bir dakika sürecektir.

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

Şimdi aşağıdaki hücreleri çalıştırmadan önce çalışma zamanını yeniden başlatmanız gerekir.

# 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

Dosyaları Yükle

İhtiyacımız olan her şeye sahip bir tar dosyası indireceğiz. Bu şunları içerir:

  • Eğitim ve değerlendirme veri kümeleri
  • veri şeması
  • Kaydedilmiş modelleri eğitme ve sunma (keras ve tahmin edici) ve kaydedilen modelleri değerlendirme (tahmin edici).
# 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

Şemayı Ayrıştırma

Biz indirilen şeylerin yanı tarafından yaratıldı bizim veri için bir şema oldu TensorFlow Veri Doğrulama . Şimdi bunu ayrıştıralım, böylece TFMA ile kullanabiliriz.

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)

TFRecords Oluşturmak için Şemayı Kullanın

Veri setimize TFMA erişimi vermemiz gerekiyor, bu yüzden bir TFRecords dosyası oluşturalım. Her özellik için bize doğru türü verdiği için şemamızı onu oluşturmak için kullanabiliriz.

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'yı Kur ve Çalıştır

TFMA, TF keras modelleri, genel TF2 imza API'lerine dayalı modeller ve ayrıca TF tahmincisi tabanlı modeller dahil olmak üzere bir dizi farklı model türünü destekler. Get_started kılavuz modeli desteklenen türleri ve herhangi bir kısıtlama tam listesi vardır. Bu örnek için biz olarak kaydedilmiş bir tahmincisi tabanlı modeli yanı sıra keras dayalı bir model nasıl yapılandırılacağı göstermek için gidiyoruz EvalSavedModel . Bkz SSS diğer yapılandırmaları örnekler için.

TFMA, eğitim zamanında kullanılan metriklerin (yani yerleşik metriklerin) yanı sıra model TFMA yapılandırma ayarlarının bir parçası olarak kaydedildikten sonra tanımlanan metriklerin hesaplanması için destek sağlar. Bizim keras için kurulum biz (bkz bizim yapılandırmasının bir parçası olarak elle bizim ölçümleri ve araziler ekleyerek gösterecek ölçümlerini desteklenir metrikleri ve araziler hakkında bilgi almak için rehber). Tahminci kurulumu için modelle birlikte kaydedilen yerleşik metrikleri kullanacağız. Kurulumlarımız ayrıca aşağıdaki bölümlerde daha ayrıntılı olarak tartışılan bir dizi dilimleme özelliği içerir.

Bir oluşturduktan sonra tfma.EvalConfig ve tfma.EvalSharedModel o zaman kullanarak TFMA çalıştırabilirsiniz tfma.run_model_analysis . Bu yaratacak tfma.EvalResult bizim ölçümleri ve araziler oluşturma için daha sonra kullanabilirsiniz.

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

tahmin edici

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.

Metrikleri ve Grafikleri Görselleştirme

Şimdi değerlendirmeyi çalıştırdığımıza göre, şimdi TFMA kullanarak görselleştirmelerimize bir göz atalım. Aşağıdaki örnekler için, değerlendirmeyi keras modelinde çalıştırmanın sonuçlarını görselleştireceğiz. Tahmincisi dayalı model güncelleştirme görüntülemek için eval_result bizim noktaya estimator_eval_result değişkeni.

eval_result = keras_eval_result
# eval_result = estimator_eval_result

İşleme Metrikleri

Görünümü ölçütleriyle için kullandığınız tfma.view.render_slicing_metrics

Varsayılan olarak görüşlerini gösterecektir Overall dilim. Belirli bir dilim görüntülemek için ya (ayar ile sütunun adını kullanabilir slicing_column ) veya temin tfma.SlicingSpec .

Metrik görselleştirmesi aşağıdaki etkileşimleri destekler:

  • Kaydırmak için tıklayın ve sürükleyin
  • Yakınlaştırmak için kaydırın
  • Görünümü sıfırlamak için sağ tıklayın
  • Daha fazla ayrıntı görmek için istenen veri noktasının üzerine gelin.
  • Alttaki seçimleri kullanarak dört farklı görünüm türü arasından seçim yapın.

Örneğin, ayarlarını yapacak slicing_column bakmak için trip_start_hour bizim Önceki özelliği 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', …

Dilimlere Genel Bakış

Dilim sayısı az olduğu zaman, varsayılan görselleştirme Dilimleri Bakış olduğunu. Her dilim için metriklerin değerlerini gösterir. Seçtiğimiz yana trip_start_hour yukarıda, bize bizi birkaç saat ve diğerlerini özel sorunlar aramasını sağlar her saat için doğruluk ve AUC gibi ölçümleri gösteriyor.

Yukarıdaki görselleştirmede:

  • Bizim olan özellik sütunu, sıralamayı deneyin trip_start_hours sütun başlığını tıklayarak, özelliği
  • Örneklerle saat bazıları için kesinlik 0 olduğuna dair bir sorun olduğunu gösterebilir, hangi hassasiyet ile sıralamayı deneyin ihbar

Grafik ayrıca dilimlerimizde farklı metrikleri seçmemize ve görüntülememize olanak tanır.

  • "Göster" menüsünden farklı metrikler seçmeyi deneyin
  • "Göster" menüsünde hatırlama seçmeyi deneyin ve ihbar örneklerle saat bazıları için hatırlama bir sorun olduğunu gösterebilir 0 olduğunu

Daha az sayıda örnek veya "ağırlık" içeren dilimleri filtrelemek için bir eşik ayarlamak da mümkündür. Minimum sayıda örnek yazabilir veya kaydırıcıyı kullanabilirsiniz.

Metrik Histogramı

Bu, aynı zamanda dilim sayısı fazla olduğunda aynı zamanda varsayılan görünüşüdür alternatif bir görselleştirme gibi bir Metrik Histogram destekler. Sonuçlar kovalara bölünecek ve dilim sayısı / toplam ağırlık / her ikisi de görselleştirilebilecektir. Sütunlar, sütun başlığına tıklanarak sıralanabilir. Küçük ağırlıklara sahip dilimler, eşik ayarlanarak filtrelenebilir. Gri bant sürüklenerek daha fazla filtreleme uygulanabilir. Aralığı sıfırlamak için bandı çift tıklayın. Filtreleme, görselleştirme ve metrik tablolarındaki aykırı değerleri kaldırmak için de kullanılabilir. Doğrusal ölçek yerine logaritmik ölçeğe geçmek için dişli simgesini tıklayın.

  • Görselleştirme menüsünde "Metrik Histogramı"nı seçmeyi deneyin

Daha Fazla Dilim

Bizim ilk tfma.EvalConfig bir bütün liste oluşturduk slicing_specs biz geçirilen güncelleme dilim bilgilerle görselleştirmek, tfma.view.render_slicing_metrics . Burada seçeceğiz trip_start_day dilim (haftanın günü). Değiştirmeyi deneyin trip_start_day için trip_start_month ve farklı dilimlerini incelemek için tekrar render.

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

TFMA, özellik kombinasyonlarını analiz etmek için özellik çaprazları oluşturmayı da destekler. Orijinal ayarları çapraz oluşturulan trip_start_hour ve 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…

İki sütunu geçmek birçok kombinasyon yaratır! En öğlen başlayacak geziler sadece görünüm bizim haç daraltmak edelim. O zaman seçme izin binary_accuracy görselleştirme:

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…

Grafikleri Oluşturma

Eklenen her türlü araziler tfma.EvalConfig sonrası eğitim olarak metric_specs kullanılarak görüntülenebilir tfma.view.render_plot .

Metriklerde olduğu gibi, grafikler dilime göre görüntülenebilir. Metrikleri aksine, bu yüzden belirli bir dilim değeri için sadece araziler görüntülenebilir tfma.SlicingSpec kullanılmalıdır ve bir dilim özelliği adını ve değerini belirtmelisiniz. Hiçbir dilim sonra sağlanıyorsa için araziler Overall dilim kullanılır.

Örneğimizde görüntülendiği aşağıda CalibrationPlot ve ConfusionMatrixPlot için hesaplandı araziler trip_start_hour:1 dilim.

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…

Zaman İçinde Model Performansını İzleme

Eğitim veri kümeniz modelinizi eğitmek için kullanılacak ve umarım test veri kümenizi ve üretimde modelinize gönderilecek verileri temsil edecektir. Ancak, çıkarım taleplerindeki veriler eğitim verilerinizle aynı kalabilirken, çoğu durumda modelinizin performansının değişmesi için yeterince değişmeye başlayacaktır.

Bu, değişikliklerden haberdar olabilmeniz ve bunlara tepki verebilmeniz için modelinizin performansını sürekli olarak izlemeniz ve ölçmeniz gerektiği anlamına gelir. TFMA'nın nasıl yardımcı olabileceğine bir göz atalım.

Kullandıkları karşılaştırın nasıl edelim yük 3 farklı modeli çalışır ve kullanım TFMA görmek 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.

İlk olarak, modelimizi dün eğittiğimizi ve dağıttığımızı hayal edeceğiz ve şimdi, bugün gelen yeni veriler üzerinde nasıl çalıştığını görmek istiyoruz. Görselleştirme, AUC görüntülenerek başlayacaktır. Kullanıcı arayüzünden şunları yapabilirsiniz:

  • "Metrik serisi ekle" menüsünü kullanarak başka metrikler ekleyin.
  • İstenmeyen grafikleri x'e tıklayarak kapatın
  • Daha fazla ayrıntı almak için veri noktalarının (grafikteki çizgi bölümlerinin uçları) üzerine gelin
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…

Şimdi bir günün daha geçtiğini hayal edeceğiz ve önceki iki güne kıyasla bugün gelen yeni verilerde nasıl olduğunu görmek istiyoruz:

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…

Model geçerliliği

TFMA, aynı anda birden fazla modeli değerlendirmek için yapılandırılabilir. Tipik olarak bu, metriklerdeki (örneğin AUC, vb.) performans farklılıklarının taban çizgisine göre ne olduğunu belirlemek için yeni bir modeli bir taban çizgisiyle (şu anda sunulan model gibi) karşılaştırmak için yapılır. Zaman eşik yapılandırılır, TFMA bir üretecek tfma.ValidationResult performans expecations ile uyumlu olup olmadığını belirten bir kayıt.

İki modeli karşılaştırmak için keras değerlendirmemizi yeniden yapılandıralım: bir aday ve bir temel. Biz de bir ayarlayarak temel karşı adayın performansını doğrular tmfa.MetricThreshold AUC metriği.

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

Bir temele karşı bir veya daha fazla modelle değerlendirmeler çalıştırırken, TFMA, değerlendirme sırasında hesaplanan tüm metrikler için otomatik olarak fark metrikleri ekler. Bu ölçümler gelen metrik fakat adını taşır _diff metrik adına eklenmiş.

Koşumuzun ürettiği metriklere bir göz atalım:

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

Şimdi doğrulama kontrollerimizin çıktısına bakalım. Kullandığımız doğrulama sonuçlarını görüntülemek için tfma.load_validator_result . Örneğimizde, AUC eşiğin altında olduğu için doğrulama başarısız olur.

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