Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

TensorFlow Model Analizi

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

TensorFlow Model Analizi (TFMA) , farklı veri dilimlerinde model değerlendirmesi gerçekleştirmek için kullanılan bir kitaplıktır. TFMA, Apache Beam kullanarak hesaplamalarını büyük miktarda veri üzerinden dağıtılmış bir şekilde gerçekleştirir.

Bu örnek colab not defteri, TFMA'nın veri kümesinin özelliklerine göre bir modelin performansını araştırmak ve görselleştirmek için nasıl kullanılabileceğini göstermektedir. Daha önce eğittiğimiz bir modeli kullanacağız ve şimdi sonuçlarla oynayacaksınız! Eğittiğimiz model, City of Chicago tarafından yayınlanan Taxi Trips veri kümesini kullanan Chicago Taxi Örneği içindi. BigQuery kullanıcı arayüzündeki tüm veri kümesini keşfedin.

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ı yaratacak mı? Daha fazla bilgi için ML adaleti hakkında okuyun.

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

Tüm bağımlılıkların düzgün bir şekilde kurulduğundan emin olmak için, bu yükleme adımını herhangi bir hata oluşmadan önce birkaç kez yeniden çalıştırmanız gerekebilir.

# This setup was tested with TF 2.3 and TFMA 0.24 (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.'

print('Installing TensorFlow')
import tensorflow as tf
print('TF version: {}'.format(tf.__version__))

print('Installing Tensorflow Model Analysis and Dependencies')
!pip install -q tensorflow_model_analysis
import apache_beam as beam
print('Beam version: {}'.format(beam.__version__))
import tensorflow_model_analysis as tfma
print('TFMA version: {}'.format(tfma.__version__))
Installing TensorFlow
TF version: 2.3.1
Installing Tensorflow Model Analysis and Dependencies
ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.

We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.

google-api-python-client 1.12.3 requires httplib2<1dev,>=0.15.0, but you'll have httplib2 0.9.2 which is incompatible.
Beam version: 2.24.0
TFMA version: 0.24.3

Dosyaları Yükle

İhtiyacımız olan her şeyi içeren bir tar dosyası indireceğiz. Şunları içerir:

  • Eğitim ve değerlendirme veri kümeleri
  • Veri şeması
  • Kaydedilen modelleri (keras ve tahminci) eğitme ve sunma ve kaydedilen modelleri değerlendirme (tahminci).
# 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.4M      0 --:--:-- --:--:-- --:--:-- 25.3M
Here's what we downloaded:
/tmp/tmpj6t03cp6:
saved_models-2.2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Şemayı ayrıştırın

İndirdiğimiz şeyler arasında, verilerimiz için TensorFlow Data Validation tarafından oluşturulan bir şema vardı. Şimdi onu TFMA ile kullanabilmemiz için ayrıştıralım.

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, o halde bir TFRecords dosyası oluşturalım. Bize her özellik için doğru türü verdiğinden, onu oluşturmak için şemamızı 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/tmpj6t03cp6/train_data.rio

TFMA'yı Kurun ve Çalıştırın

TFMA, TF keras modelleri, genel TF2 imza API'lerine dayalı modeller ve TF tahmincisine dayalı modeller dahil olmak üzere bir dizi farklı model türünü destekler. Get_started kılavuzu desteklenen model türlerinin tam listesini ve tüm kısıtlamaları içerir. Bu örnek için, keras tabanlı bir modelin yanı sıra bir EvalSavedModel olarak kaydedilen bir tahminci tabanlı modelin nasıl yapılandırılacağını EvalSavedModel . Diğer yapılandırma örnekleri için SSS bölümüne bakın.

TFMA, eğitim zamanında kullanılan ölçümlerin (yani yerleşik ölçümlerin) yanı sıra model TFMA yapılandırma ayarlarının bir parçası olarak kaydedildikten sonra tanımlanan ölçümlerin hesaplanması için destek sağlar. Keras kurulumumuz için, yapılandırmamızın bir parçası olarak ölçümlerimizi ve grafikleri manuel olarak eklemeyi göstereceğiz (desteklenen ölçümler ve grafikler hakkında bilgi için ölçüm kılavuzuna bakın). Tahminci kurulumu için, modelle kaydedilen yerleşik metrikleri kullanacağız. Kurulumlarımız, aşağıdaki bölümlerde daha ayrıntılı olarak tartışılan bir dizi dilimleme özelliğini de içerir.

Bir tfma.EvalConfig ve tfma.EvalSharedModel oluşturduktan sonra tfma.run_model_analysis kullanarak tfma.run_model_analysis çalıştırabiliriz. Bu, daha sonra ölçümlerimizi ve grafikleri tfma.EvalResult için kullanabileceğimiz bir tfma.EvalResult oluşturacaktır.

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:absl:Tensorflow version (2.3.1) 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.6/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:70: 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.6/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:70: 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)`

Tahmincisi

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.3.1) found. Note that TFMA support for TF 2.0 is currently in beta

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/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.6/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/tmpj6t03cp6/saved_models-2.2/models/estimator/eval_model_dir/1591221811/variables/variables

INFO:tensorflow:Restoring parameters from /tmp/tmpj6t03cp6/saved_models-2.2/models/estimator/eval_model_dir/1591221811/variables/variables

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/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.6/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

Artık değerlendirmeyi çalıştırdığımıza göre, TFMA kullanarak görselleştirmelerimize bir göz atalım. Aşağıdaki örnekler için, değerlendirmeyi keras modeli üzerinde çalıştırmanın sonuçlarını görselleştireceğiz. Tahminciye dayalı modeli görüntülemek için eval_result estimator_eval_result eval_result değişkenimize işaret eval_result şekilde güncelleyin.

eval_result = keras_eval_result
# eval_result = estimator_eval_result

Oluşturma Metrikleri

Metrikleri görüntülemek için tfma.view.render_slicing_metrics kullanırsınız

Varsayılan olarak, görünümler Overall dilimi gösterecektir. Belirli bir dilimi görüntülemek için sütunun adını kullanabilir ( slicing_column ayarlayarak) veya bir tfma.SlicingSpec sağlayabilirsiniz.

Metrik görselleştirme 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.
  • Alt kısımdaki seçimleri kullanarak dört farklı görünüm türünden birini seçin.

Ö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ış

Varsayılan görselleştirme, dilim sayısı az olduğunda Dilimlere Genel Bakış'tır . Her dilim için metrik değerlerini gösterir. Yukarıda trip_start_hour , bize her saat için doğruluk ve AUC gibi ölçümleri gösteriyor, bu da bazı saatlere özel olan ve diğerlerine özgü sorunları trip_start_hour olanak tanıyor.

Yukarıdaki görselleştirmede:

  • trip_start_hours özelliğimiz olan özellik sütununu sütun başlığına tıklayarak sıralamayı deneyin
  • Kesinliğe göre sıralamayı deneyin ve örneklerle bazı saatlerin kesinliğinin 0 olduğuna dikkat edin, bu da bir soruna işaret edebilir.

Grafik aynı zamanda dilimlerimizdeki farklı ölçümleri 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ırlamayı seçmeyi deneyin ve örneklerle bazı saatlerin geri çağırmanın 0 olduğuna dikkat edin, bu da bir soruna işaret edebilir

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

Metrik Histogramı

Bu görünüm, alternatif bir görselleştirme olarak bir Metrik Histogramını da destekler; bu, dilim sayısı büyük olduğunda da varsayılan görünümdür. Sonuçlar bölümlere bölünecek ve dilim sayısı / toplam ağırlıklar / her ikisi de görselleştirilebilecek. Sütun başlığı tıklanarak sütunlar sıralanabilir. Küçük ağırlığa sahip dilimler, eşik ayarlanarak filtrelenebilir. Gri bant sürüklenerek daha fazla filtreleme uygulanabilir. Aralığı sıfırlamak için banda ç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 trip_start_day dilimini (haftanın günleri) trip_start_day . trip_start_day değerini trip_start_month değiştirmeyi ve farklı dilimleri incelemek için yeniden oluşturmayı deneyin.

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

TFMA ayrıca özellik kombinasyonlarını analiz etmek için özellik çarpılarının oluşturulmasını destekler. Orijinal ayarlarımız bir cross 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 oluşturur! Sadece öğle saatlerinde başlayan gezilere bakmak için haçımızı daraltalım . Ardından görselleştirmeden 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…

Rendering Grafikleri

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 dilimlere göre görüntülenebilir. Metriklerden farklı olarak, yalnızca belirli bir dilim değeri için grafikler görüntülenebilir, bu nedenle tfma.SlicingSpec kullanılmalı ve hem bir dilim özelliği adı hem de değeri belirtmelidir. Herhangi bir dilim sağlanmazsa, Overall dilim için grafikler kullanılır.

Aşağıdaki örnekte, trip_start_hour:1 dilim için hesaplanan CalibrationPlot ve ConfusionMatrixPlot grafiklerini görüntülüyoruz.

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ız test veri kümenizi ve üretimde modelinize gönderilecek verileri temsil eder. Ancak, çıkarım isteklerindeki veriler eğitim verilerinizle aynı kalsa da, çoğu durumda modelinizin performansının değişmesi için yeterince değişmeye başlayacaktır.

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

3 farklı model çalıştırması yükleyelim ve render_time_series kullanarak nasıl karşılaştırdıklarını görmek için 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.3.1) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:absl:Tensorflow version (2.3.1) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:absl:Tensorflow version (2.3.1) found. Note that TFMA support for TF 2.0 is currently in beta

İlk olarak, dün modelimizi eğittiğimizi ve uyguladığımızı hayal edeceğiz ve şimdi bugün gelen yeni verilerde nasıl olduğunu görmek istiyoruz. Görselleştirme, AUC'yi görüntüleyerek başlayacaktır. Kullanıcı arayüzünden şunları yapabilirsiniz:

  • "Metrik serisi ekle" menüsünü kullanarak diğer metrikleri ekleyin.
  • X'e tıklayarak istenmeyen grafikleri kapatın
  • Daha fazla ayrıntı almak için veri noktalarının (grafikteki çizgi segmentlerinin 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': {'': {'': {'calibration': {'doubleValue': …

Şimdi başka bir günün daha geçtiğini hayal edeceğiz ve bugün gelen yeni verilerde önceki iki güne kıyasla nasıl gittiğini 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': {'': {'': {'calibration': {'doubleValue': …

Model geçerliliği

TFMA, aynı anda birden çok modeli değerlendirecek şekilde yapılandırılabilir. Tipik olarak bu, ölçülerdeki (örneğin AUC, vb.) Taban çizgisine göre performans farklılıklarının ne olduğunu belirlemek için yeni bir modeli bir temelle (şu anda hizmet veren model gibi) karşılaştırmak için yapılır. Eşikler yapılandırıldığında, TFMA, performansın tfma.ValidationResult gösteren bir tfma.ValidationResult kaydı oluşturur.

Keras değerlendirmemizi iki modeli karşılaştırmak için yeniden yapılandıralım: bir aday ve bir temel. Ayrıca, AUC metriğine bir tmfa.MetricThreshold ayarlayarak adayın taban çizgisine göre performansını doğrulayacağız.

# 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.3.1) found. Note that TFMA support for TF 2.0 is currently in beta
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/evaluators/metrics_validator.py:66: RuntimeWarning: invalid value encountered in true_divide
  ratio = diff / metrics[key.make_baseline_key(baseline_model_name)]

Bir temele göre bir veya daha fazla modelle değerlendirmeler çalıştırırken, TFMA, değerlendirme sırasında hesaplanan tüm ölçümler için otomatik olarak fark ölçümleri ekler. Bu metrikler, ilgili metrikle adlandırılır, ancak metrik adına _diff eklenir.

Çalıştırmamızın ürettiği metriklere bir göz atalım:

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

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

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