TensorFlow.org'da görüntüleyin | Google Colab'da çalıştırın | Kaynağı GitHub'da görüntüleyin | Not defterini indir |
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