एमएल समुदाय दिवस 9 नवंबर है! TensorFlow, JAX से नई जानकारी के लिए हमसे जुड़ें, और अधिक जानें

TensorFlow मॉडल विश्लेषण

TensorFlow विस्तारित (TFX) के एक प्रमुख घटक का एक उदाहरण

TensorFlow मॉडल विश्लेषण (TFMA) डेटा के विभिन्न स्लाइस में मॉडल मूल्यांकन करने के लिए एक पुस्तकालय है। TFMA अपाचे बीम का उपयोग करके बड़ी मात्रा में डेटा पर वितरित तरीके से अपनी गणना करता है।

यह उदाहरण कोलाब नोटबुक दिखाता है कि कैसे TFMA का उपयोग डेटासेट की विशेषताओं के संबंध में किसी मॉडल के प्रदर्शन की जांच और कल्पना करने के लिए किया जा सकता है। हम उस मॉडल का उपयोग करेंगे जिसे हमने पहले प्रशिक्षित किया था, और अब आप परिणामों के साथ खेल सकते हैं! हमने जिस मॉडल को प्रशिक्षित किया वह शिकागो टैक्सी उदाहरण के लिए था, जो शिकागो शहर द्वारा जारी टैक्सी ट्रिप्स डेटासेट का उपयोग करता है। BigQuery UI में संपूर्ण डेटासेट एक्सप्लोर करें.

एक मॉडलर और डेवलपर के रूप में, इस बारे में सोचें कि इस डेटा का उपयोग कैसे किया जाता है और मॉडल की भविष्यवाणियों से संभावित लाभ और हानि हो सकती है। इस तरह का एक मॉडल सामाजिक पूर्वाग्रहों और असमानताओं को मजबूत कर सकता है। क्या कोई विशेषता उस समस्या के लिए प्रासंगिक है जिसे आप हल करना चाहते हैं या यह पूर्वाग्रह का परिचय देगी? अधिक जानकारी के लिए, एमएल निष्पक्षता के बारे में पढ़ें।

डेटासेट में कॉलम हैं:

पिकअप_समुदाय_क्षेत्र किराया ट्रिप_स्टार्ट_माह
यात्रा_शुरू_घंटा यात्रा_शुरू_दिन ट्रिप_स्टार्ट_टाइमस्टैम्प
पिकअप_अक्षांश पिकअप_देशांतर ड्रॉपऑफ_अक्षांश
ड्रॉपऑफ_देशांतर यात्रा_मील पिकअप_सेंसस_ट्रैक्ट
ड्रॉपऑफ़_सेंसस_ट्रैक्ट भुगतान के प्रकार कंपनी
ट्रिप_सेकंड ड्रॉपऑफ़_समुदाय_क्षेत्र टिप्स

जुपिटर एक्सटेंशन स्थापित करें

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

TensorFlow मॉडल विश्लेषण (TFMA) स्थापित करें

यह सभी निर्भरताओं को खींच लेगा, और इसमें एक मिनट का समय लगेगा।

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

अब आपको नीचे की कोशिकाओं को चलाने से पहले रनटाइम को पुनरारंभ करना होगा।

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

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

import tensorflow as tf
print('TF version: {}'.format(tf.__version__))
import apache_beam as beam
print('Beam version: {}'.format(beam.__version__))
import tensorflow_model_analysis as tfma
print('TFMA version: {}'.format(tfma.__version__))
TF version: 2.5.0
Beam version: 2.29.0
TFMA version: 0.31.0

फ़ाइलें लोड करें

हम एक टार फाइल डाउनलोड करेंगे जिसमें वह सब कुछ होगा जो हमें चाहिए। इसमें शामिल है:

  • प्रशिक्षण और मूल्यांकन डेटासेट
  • डेटा स्कीमा
  • सहेजे गए मॉडल (केरस और अनुमानक) और eval सहेजे गए मॉडल (अनुमानकर्ता) को प्रशिक्षण और सेवा देना।
# 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

स्कीमा पार्स करें

हमारे द्वारा डाउनलोड की गई चीजों में हमारे डेटा के लिए एक स्कीमा था जिसे TensorFlow Data Validation द्वारा बनाया गया था। आइए अब इसका विश्लेषण करें ताकि हम इसे 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)

TFRecords बनाने के लिए स्कीमा का उपयोग करें

हमें TFMA को अपने डेटासेट तक पहुंच प्रदान करने की आवश्यकता है, तो चलिए एक TFRecords फ़ाइल बनाते हैं। हम इसे बनाने के लिए अपने स्कीमा का उपयोग कर सकते हैं, क्योंकि यह हमें प्रत्येक सुविधा के लिए सही प्रकार देता है।

import csv

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

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

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

टीएफएमए सेटअप और रन करें

TFMA TF केरस मॉडल, जेनेरिक TF2 हस्ताक्षर API पर आधारित मॉडल, साथ ही TF अनुमानक आधारित मॉडल सहित कई विभिन्न मॉडल प्रकारों का समर्थन करता है। get_started मार्गदर्शिका में समर्थित मॉडल प्रकारों और किसी भी प्रतिबंध की पूरी सूची है। इस उदाहरण के लिए हम एक keras एक आकलनकर्ता आधारित मॉडल है कि एक के रूप में बचा लिया गया था और साथ ही आधारित मॉडल को कॉन्फ़िगर कैसे दिखाने के लिए जा रहे हैं EvalSavedModel । अन्य कॉन्फ़िगरेशन के उदाहरणों के लिए अक्सर पूछे जाने वाले प्रश्न देखें।

TFMA प्रशिक्षण समय (यानी अंतर्निर्मित मीट्रिक) में उपयोग किए गए मीट्रिक की गणना के लिए समर्थन प्रदान करता है और साथ ही TFMA कॉन्फ़िगरेशन सेटिंग्स के भाग के रूप में मॉडल को सहेजे जाने के बाद परिभाषित मीट्रिक भी। हमारे केरस सेटअप के लिए हम अपने मेट्रिक्स और प्लॉट्स को अपने कॉन्फ़िगरेशन के हिस्से के रूप में मैन्युअल रूप से जोड़कर प्रदर्शित करेंगे (मैट्रिक्स और प्लॉट्स पर जानकारी के लिए मेट्रिक्स गाइड देखें जो समर्थित हैं)। अनुमानक सेटअप के लिए हम मॉडल के साथ सहेजे गए अंतर्निर्मित मीट्रिक का उपयोग करेंगे। हमारे सेटअप में कई स्लाइसिंग स्पेक्स भी शामिल हैं जिनकी चर्चा निम्नलिखित अनुभागों में अधिक विस्तार से की गई है।

tfma.EvalConfig और tfma.EvalSharedModel बनाने के बाद हम tfma.run_model_analysis का उपयोग करके tfma.run_model_analysis चला सकते हैं। यह एक tfma.EvalResult जिसका उपयोग हम बाद में अपने मेट्रिक्स और प्लॉट को रेंडर करने के लिए कर सकते हैं।

केरासो

import tensorflow_model_analysis as tfma

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

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

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

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

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

# Run TFMA
keras_eval_result = tfma.run_model_analysis(
    eval_shared_model=keras_eval_shared_model,
    eval_config=keras_eval_config,
    data_location=tfrecord_file,
    output_path=keras_output_path)
​​
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)`

क़ीमत लगानेवाला

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.

विज़ुअलाइज़िंग मेट्रिक्स और प्लॉट

अब जब हमने मूल्यांकन पूरा कर लिया है, तो आइए TFMA का उपयोग करके अपने विज़ुअलाइज़ेशन पर एक नज़र डालते हैं। निम्नलिखित उदाहरणों के लिए, हम केरस मॉडल पर मूल्यांकन चलाने के परिणामों की कल्पना करेंगे। अनुमानक आधारित मॉडल देखने के लिए हमारे estimator_eval_result चर पर इंगित करने के लिए eval_result को अपडेट करें।

eval_result = keras_eval_result
# eval_result = estimator_eval_result

रेंडरिंग मेट्रिक्स

मीट्रिक देखने के लिए आप tfma.view.render_slicing_metrics उपयोग tfma.view.render_slicing_metrics

डिफ़ॉल्ट रूप से दृश्य Overall स्लाइस प्रदर्शित करेंगे। किसी विशेष स्लाइस को देखने के लिए आप या तो कॉलम के नाम का उपयोग कर सकते हैं ( slicing_column सेट slicing_column ) या tfma.SlicingSpec प्रदान कर tfma.SlicingSpec

मेट्रिक्स विज़ुअलाइज़ेशन निम्नलिखित इंटरैक्शन का समर्थन करता है:

  • पैन करने के लिए क्लिक करें और खींचें
  • ज़ूम करने के लिए स्क्रॉल करें
  • दृश्य को रीसेट करने के लिए राइट क्लिक करें
  • अधिक विवरण देखने के लिए वांछित डेटा बिंदु पर होवर करें।
  • नीचे दिए गए चयनों का उपयोग करके चार अलग-अलग प्रकार के दृश्यों में से चयन करें।

उदाहरण के लिए, हम अपने पिछले slicing_specs की trip_start_hour विशेषता को देखने के लिए slicing_column सेट करेंगे।

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

स्लाइस अवलोकन

स्लाइस की संख्या कम होने पर डिफ़ॉल्ट विज़ुअलाइज़ेशन स्लाइस अवलोकन होता है। यह प्रत्येक स्लाइस के लिए मीट्रिक के मान दिखाता है। चूंकि हमने ऊपर trip_start_hour चयन trip_start_hour है, यह हमें प्रत्येक घंटे के लिए सटीकता और एयूसी जैसे मीट्रिक दिखा रहा है, जो हमें कुछ घंटों के लिए विशिष्ट मुद्दों की तलाश करने की अनुमति देता है, अन्य नहीं।

उपरोक्त दृश्य में:

  • कॉलम हेडर पर क्लिक करके फीचर कॉलम को सॉर्ट करने का प्रयास करें, जो कि हमारी trip_start_hours फीचर है
  • सटीकता के आधार पर छाँटने का प्रयास करें, और ध्यान दें कि उदाहरणों के साथ कुछ घंटों की सटीकता 0 है, जो किसी समस्या का संकेत दे सकती है

चार्ट हमें अपने स्लाइस में विभिन्न मीट्रिक चुनने और प्रदर्शित करने की भी अनुमति देता है।

  • "दिखाएँ" मेनू से विभिन्न मीट्रिक चुनने का प्रयास करें
  • "दिखाएँ" मेनू में रिकॉल का चयन करने का प्रयास करें, और ध्यान दें कि उदाहरणों के साथ कुछ घंटों के लिए रिकॉल 0 है, जो किसी समस्या का संकेत हो सकता है

कम संख्या में उदाहरणों या "वजन" के साथ स्लाइस को फ़िल्टर करने के लिए एक सीमा निर्धारित करना भी संभव है। आप न्यूनतम संख्या में उदाहरण टाइप कर सकते हैं, या स्लाइडर का उपयोग कर सकते हैं।

मेट्रिक्स हिस्टोग्राम

यह दृश्य वैकल्पिक विज़ुअलाइज़ेशन के रूप में मेट्रिक्स हिस्टोग्राम का भी समर्थन करता है, जो स्लाइस की संख्या बड़ी होने पर डिफ़ॉल्ट दृश्य भी होता है। परिणामों को बाल्टियों में विभाजित किया जाएगा और स्लाइस की संख्या/कुल भार/दोनों की कल्पना की जा सकती है। कॉलम हेडर पर क्लिक करके कॉलम को सॉर्ट किया जा सकता है। थ्रेशोल्ड सेट करके छोटे वज़न वाले स्लाइस को फ़िल्टर किया जा सकता है। ग्रे बैंड को खींचकर आगे की फ़िल्टरिंग लागू की जा सकती है। सीमा को रीसेट करने के लिए, बैंड पर डबल क्लिक करें। फ़िल्टरिंग का उपयोग विज़ुअलाइज़ेशन और मीट्रिक तालिकाओं में बाहरी कारकों को हटाने के लिए भी किया जा सकता है। रेखीय पैमाने के बजाय लघुगणकीय पैमाने पर स्विच करने के लिए गियर आइकन पर क्लिक करें।

  • विज़ुअलाइज़ेशन मेनू में "मैट्रिक्स हिस्टोग्राम" का चयन करने का प्रयास करें

अधिक स्लाइस

हमारी प्रारंभिक tfma.EvalConfig की एक पूरी सूची बनाई slicing_specs है, जो हम करने के लिए पारित कर दिया अद्यतन करने टुकड़ा जानकारी से कल्पना कर सकते हैं tfma.view.render_slicing_metrics । यहां हम trip_start_day स्लाइस (सप्ताह के दिन) trip_start_dayअलग-अलग स्लाइस की जांच करने के लिए trip_start_day को trip_start_month बदलने और फिर से रेंडर करने की कोशिश करें.

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

TFMA सुविधाओं के संयोजन का विश्लेषण करने के लिए फीचर क्रॉस बनाने का भी समर्थन करता है। हमारी मूल सेटिंग ने एक क्रॉस trip_start_hour और trip_start_day :

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

दो स्तंभों को पार करने से बहुत सारे संयोजन बनते हैं! आइए अपने क्रॉस को केवल दोपहर से शुरू होने वाली यात्राओं को देखने के लिए सीमित करें। फिर विज़ुअलाइज़ेशन से binary_accuracy का चयन करें:

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

रेंडरिंग प्लॉट

किसी भी भूखंडों कि करने के लिए जोड़ा गया था tfma.EvalConfig पद प्रशिक्षण के रूप में metric_specs का उपयोग कर प्रदर्शित किया जा सकता tfma.view.render_plot

मेट्रिक्स की तरह, प्लॉट्स को स्लाइस द्वारा देखा जा सकता है। मेट्रिक्स के विपरीत, केवल एक विशेष स्लाइस मान के लिए प्लॉट प्रदर्शित किए जा सकते हैं, इसलिए tfma.SlicingSpec का उपयोग किया जाना चाहिए और इसे एक स्लाइस सुविधा नाम और मान दोनों निर्दिष्ट करना चाहिए। यदि कोई स्लाइस प्रदान नहीं किया जाता है तो Overall स्लाइस के लिए प्लॉट का उपयोग किया जाता है।

उदाहरण में हम दिखा रहे हैं जो नीचे CalibrationPlot और ConfusionMatrixPlot भूखंडों कि गणना कर रहे थे trip_start_hour:1 टुकड़ा।

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

समय के साथ ट्रैकिंग मॉडल प्रदर्शन

आपके प्रशिक्षण डेटासेट का उपयोग आपके मॉडल को प्रशिक्षित करने के लिए किया जाएगा, और उम्मीद है कि यह आपके परीक्षण डेटासेट और उत्पादन में आपके मॉडल को भेजे जाने वाले डेटा का प्रतिनिधि होगा। हालाँकि, जबकि अनुमान अनुरोधों में डेटा आपके प्रशिक्षण डेटा के समान ही रह सकता है, कई मामलों में यह पर्याप्त रूप से बदलना शुरू हो जाएगा ताकि आपके मॉडल का प्रदर्शन बदल जाए।

इसका मतलब है कि आपको निरंतर आधार पर अपने मॉडल के प्रदर्शन की निगरानी और मूल्यांकन करने की आवश्यकता है, ताकि आप परिवर्तनों से अवगत हो सकें और उन पर प्रतिक्रिया कर सकें। आइए देखें कि TFMA कैसे मदद कर सकता है।

आइए 3 अलग-अलग मॉडल रन लोड करें और TFMA का उपयोग करके देखें कि वे render_time_series का उपयोग करके कैसे तुलना करते हैं।

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

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

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

  # Run TFMA
  tfma.run_model_analysis(eval_shared_model=eval_shared_model,
                          eval_config=keras_eval_config,
                          data_location=tfrecord_file,
                          output_path=output_path)
WARNING: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

सबसे पहले, हम कल्पना करेंगे कि हमने कल अपने मॉडल को प्रशिक्षित और तैनात किया है, और अब हम देखना चाहते हैं कि यह आज आने वाले नए डेटा पर कैसा प्रदर्शन कर रहा है। विज़ुअलाइज़ेशन AUC प्रदर्शित करके शुरू होगा। यूआई से आप यह कर सकते हैं:

  • "मीट्रिक श्रृंखला जोड़ें" मेनू का उपयोग करके अन्य मीट्रिक जोड़ें।
  • x . पर क्लिक करके अवांछित रेखांकन बंद करें
  • अधिक विवरण प्राप्त करने के लिए डेटा बिंदुओं (ग्राफ़ में रेखा खंडों के सिरे) पर होवर करें
eval_results_from_disk = tfma.load_eval_results(output_paths[:2])

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

अब हम कल्पना करेंगे कि एक और दिन बीत चुका है और हम देखना चाहते हैं कि यह पिछले दो दिनों की तुलना में आज आने वाले नए डेटा पर कैसा प्रदर्शन कर रहा है:

eval_results_from_disk = tfma.load_eval_results(output_paths)

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

मॉडल सत्यापन

TFMA को एक ही समय में कई मॉडलों का मूल्यांकन करने के लिए कॉन्फ़िगर किया जा सकता है। आमतौर पर यह एक नए मॉडल की तुलना बेसलाइन (जैसे कि वर्तमान में सेवारत मॉडल) से करने के लिए किया जाता है ताकि यह निर्धारित किया जा सके कि मेट्रिक्स (जैसे एयूसी, आदि) में प्रदर्शन अंतर बेसलाइन के सापेक्ष क्या हैं। जब थ्रेशोल्ड कॉन्फ़िगर किए जाते हैं, तो TFMA एक tfma.ValidationResult रिकॉर्ड तैयार करेगा जो दर्शाता है कि प्रदर्शन tfma.ValidationResult मेल खाता है या नहीं।

आइए दो मॉडलों की तुलना करने के लिए अपने केरस मूल्यांकन को फिर से कॉन्फ़िगर करें: एक उम्मीदवार और एक आधार रेखा। हम AUC मीट्रिक पर tmfa.MetricThreshold सेट करके बेसलाइन के विरुद्ध उम्मीदवार के प्रदर्शन को भी मान्य करेंगे।

# 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

आधार रेखा के विरुद्ध एक या अधिक मॉडलों के साथ मूल्यांकन चलाते समय, TFMA स्वचालित रूप से मूल्यांकन के दौरान परिकलित सभी मीट्रिक के लिए भिन्न मीट्रिक जोड़ता है। इन मीट्रिक का नाम संबंधित मीट्रिक के नाम पर रखा गया है लेकिन मीट्रिक नाम के साथ _diff जोड़ा गया है।

आइए हमारे रन द्वारा निर्मित मेट्रिक्स पर एक नज़र डालें:

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

अब आइए हमारे सत्यापन जांच से आउटपुट देखें। सत्यापन परिणाम देखने के लिए हमtfma.load_validator_result उपयोगtfma.load_validator_result । हमारे उदाहरण के लिए, सत्यापन विफल हो जाता है क्योंकि AUC सीमा से नीचे है।

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