ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

TensorFlow تحليل نموذج

مثال لمكون رئيسي في TensorFlow الموسعة (TFX)

يوضح هذا المثال دفتر colab كيف TensorFlow تحليل نموذج (TFMA) يمكن استخدامها لتحقيق خصائص مجموعة بيانات وأداء نموذج وتصور. سنستخدم النموذج الذي دربنا في السابق، والآن تحصل للعب مع النتائج!

وكان النموذج الذي تدرب ل شيكاغو تاكسي المثال ، والذي يستخدم سيارات الأجرة رحلات بيانات الصادرة عن مدينة شيكاغو.

قراءة المزيد عن مجموعة البيانات في جوجل الاستعلام الشامل . استكشاف البيانات الكاملة في UI الاستعلام الشامل .

الأعمدة في ورقة العمل هي:

pickup_community_area أجرة 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 نوع الدفع شركة
trip_seconds dropoff_community_area نصائح

تثبيت ملحقات Jupyter

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

تثبيت TensorFlow تحليل نموذج (TFMA)

وهذا سحب في كل التبعيات، وسوف يستغرق ذلك دقيقة. الرجاء تجاهل التحذيرات.

 import sys

# Confirm that we're using Python 3
assert sys.version_info.major is 3, 'Oops, not running Python 3. Use Runtime > Change runtime type'
 
 import tensorflow as tf
print('TF version: {}'.format(tf.__version__))

print('Installing Apache Beam')
!pip install -Uq apache_beam==2.17.0
import apache_beam as beam
print('Beam version: {}'.format(beam.__version__))

# Install TFMA
# This will pull in all the dependencies, and will take a minute
# Please ignore the warnings
!pip install -q tensorflow-model-analysis==0.21.3

import tensorflow as tf
import tensorflow_model_analysis as tfma
print('TFMA version: {}'.format(tfma.version.VERSION_STRING))
 
TF version: 2.2.0
Installing Apache Beam
Beam version: 2.17.0
ERROR: tfx-bsl 0.22.1 has requirement apache-beam[gcp]<3,>=2.20, but you'll have apache-beam 2.17.0 which is incompatible.
ERROR: tfx-bsl 0.22.1 has requirement pyarrow<0.17,>=0.16.0, but you'll have pyarrow 0.15.1 which is incompatible.
ERROR: tfx-bsl 0.22.1 has requirement tensorflow-metadata<0.23,>=0.22.2, but you'll have tensorflow-metadata 0.21.2 which is incompatible.

Error importing tfx_bsl_extension.coders. Some tfx_bsl functionalities are not available
TFMA version: 0.21.3

تحميل الملفات

ونحن سوف تحميل ملف القطران الذي يحتوي على كل ما نحتاجه. ويشمل ذلك:

  • قواعد بيانات التدريب والتقييم
  • مخطط البيانات
  • تدريب نتائج EvalSavedModels
 # Download the tar file from GCP and extract it
import io, os, tempfile
BASE_DIR = tempfile.mkdtemp()
TFMA_DIR = os.path.join(BASE_DIR, 'eval_saved_models-0.15.0')
DATA_DIR = os.path.join(TFMA_DIR, 'data')
OUTPUT_DIR = os.path.join(TFMA_DIR, 'output')
SCHEMA = os.path.join(TFMA_DIR, 'schema.pbtxt')

!wget https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/eval_saved_models-0.15.0.tar
!tar xf eval_saved_models-0.15.0.tar
!mv eval_saved_models-0.15.0 {BASE_DIR}
!rm eval_saved_models-0.15.0.tar

print("Here's what we downloaded:")
!ls -R {TFMA_DIR}
 
--2020-07-27 09:11:38--  https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/eval_saved_models-0.15.0.tar
Resolving storage.googleapis.com (storage.googleapis.com)... 64.233.189.128, 108.177.97.128, 108.177.125.128, ...
Connecting to storage.googleapis.com (storage.googleapis.com)|64.233.189.128|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4311040 (4.1M) [application/x-tar]
Saving to: ‘eval_saved_models-0.15.0.tar’

eval_saved_models-0 100%[===================>]   4.11M  12.3MB/s    in 0.3s    

2020-07-27 09:11:39 (12.3 MB/s) - ‘eval_saved_models-0.15.0.tar’ saved [4311040/4311040]

Here's what we downloaded:
/tmp/tmpgq6r13oe/eval_saved_models-0.15.0:
data  run_0  run_1  run_2  schema.pbtxt

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/data:
eval  train

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/data/eval:
data.csv

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/data/train:
data.csv

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0:
eval_model_dir

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir:
1578507304

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir/1578507304:
assets  saved_model.pb  variables

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir/1578507304/assets:
vocab_compute_and_apply_vocabulary_1_vocabulary
vocab_compute_and_apply_vocabulary_vocabulary

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir/1578507304/variables:
variables.data-00000-of-00001  variables.index

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_1:
eval_model_dir

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_1/eval_model_dir:
1578507304

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_1/eval_model_dir/1578507304:
assets  saved_model.pb  variables

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_1/eval_model_dir/1578507304/assets:
vocab_compute_and_apply_vocabulary_1_vocabulary
vocab_compute_and_apply_vocabulary_vocabulary

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_1/eval_model_dir/1578507304/variables:
variables.data-00000-of-00001  variables.index

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_2:
eval_model_dir

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_2/eval_model_dir:
1578507304

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_2/eval_model_dir/1578507304:
assets  saved_model.pb  variables

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_2/eval_model_dir/1578507304/assets:
vocab_compute_and_apply_vocabulary_1_vocabulary
vocab_compute_and_apply_vocabulary_vocabulary

/tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_2/eval_model_dir/1578507304/variables:
variables.data-00000-of-00001  variables.index

تحليل مخطط

ومن بين الأشياء التي تم تحميلها كان مخطط لبياناتنا التي تم إنشاؤها بواسطة TensorFlow التحقق من صحة البيانات . تحليل دعونا أن الآن حتى نتمكن من استخدامه مع TFMA.

 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 len(line[key]) > 0:
      if feature.type == schema_pb2.FLOAT:
        example.features.feature[key].float_list.value[:] = [float(line[key])]
      elif feature.type == schema_pb2.INT:
        example.features.feature[key].int64_list.value[:] = [int(line[key])]
      elif feature.type == schema_pb2.BYTES:
        example.features.feature[key].bytes_list.value[:] = [line[key].encode('utf8')]
    else:
      if feature.type == schema_pb2.FLOAT:
        example.features.feature[key].float_list.value[:] = []
      elif feature.type == schema_pb2.INT:
        example.features.feature[key].int64_list.value[:] = []
      elif feature.type == schema_pb2.BYTES:
        example.features.feature[key].bytes_list.value[:] = []
  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())
  writer.flush()
  writer.close()

!ls {TFRecord_file}
 
/tmp/tmpgq6r13oe/train_data.rio

تشغيل TFMA والعرض القياسات

الآن نحن على استعداد لإنشاء دالة التي سنستخدم لتشغيل TFMA وتقديم المقاييس. ويتطلب ذلك EvalSavedModel ، قائمة SliceSpecs ، وفهرس إلى قائمة SliceSpec. وسوف خلق EvalResult باستخدام tfma.run_model_analysis ، واستخدامها لإنشاء SlicingMetricsViewer باستخدام tfma.view.render_slicing_metrics ، والتي سوف تجعل التصور من مجموعة البيانات لدينا باستخدام شريحة خلقنا.

 def run_and_render(eval_model=None, slice_list=None, slice_idx=0):
  """Runs the model analysis and renders the slicing metrics

  Args:
      eval_model: An instance of tf.saved_model saved with evaluation data
      slice_list: A list of tfma.slicer.SingleSliceSpec giving the slices
      slice_idx: An integer index into slice_list specifying the slice to use

  Returns:
      A SlicingMetricsViewer object if in Jupyter notebook; None if in Colab.
  """
  eval_result = tfma.run_model_analysis(eval_shared_model=eval_model,
                                          data_location=TFRecord_file,
                                          file_format='tfrecords',
                                          slice_spec=slice_list,
                                          output_path='sample_data',
                                          extractors=None)
  return tfma.view.render_slicing_metrics(eval_result, slicing_spec=slice_list[slice_idx])
 

تشريح وتقطيع

نحن في السابق تدريب نموذج، والآن لدينا تحميل النتائج. دعونا نلقي نظرة على تصورات لدينا، بدءا باستخدام TFMA إلى شريحة طول ميزات معينة. ولكن أولا نحن بحاجة لقراءة في EvalSavedModel من أحد أشواط التدريب السابقة لدينا.

المؤامرات هي التفاعلية:

  • انقر واسحب لعموم
  • انتقل إلى التكبير
  • انقر بزر الماوس الأيمن لإعادة تعيين العرض

ببساطة تحوم فوق نقطة البيانات المطلوبة لمعرفة المزيد من التفاصيل. اختر من أربعة أنواع مختلفة من قطع باستخدام التحديدات في القاع.

على سبيل المثال، فإننا سوف تحديد slicing_column أن ننظر إلى trip_start_hour ميزة في منطقتنا SliceSpec .

 # Load the TFMA results for the first training run
# This will take a minute
eval_model_base_dir_0 = os.path.join(TFMA_DIR, 'run_0', 'eval_model_dir')
eval_model_dir_0 = os.path.join(eval_model_base_dir_0, next(os.walk(eval_model_base_dir_0))[1][0])
eval_shared_model_0 = tfma.default_eval_shared_model(eval_saved_model_path=eval_model_dir_0)

# Slice our data by the trip_start_hour feature
slices = [tfma.slicer.SingleSliceSpec(columns=['trip_start_hour'])]

run_and_render(eval_model=eval_shared_model_0, slice_list=slices, slice_idx=0)
 
WARNING:tensorflow:Tensorflow version (2.2.0) 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/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir/1578507304/variables/variables

INFO:tensorflow:Restoring parameters from /tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir/1578507304/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.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py:1666: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py:1666: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.
WARNING:root: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_and_plots_serialization.py:125: 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_and_plots_serialization.py:125: 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)`

SlicingMetricsViewer(config={'weightedExamplesColumn': 'post_export_metrics/example_count'}, data=[{'slice': '…

شرائح نظرة عامة

التصور الافتراضي هو شرائح نظرة عامة عندما يكون عدد شرائح صغيرة. فإنه يدل على قيم المقاييس لكل شريحة. وبما أننا اخترتها trip_start_hour أعلاه، انها تظهر لنا مقاييس مثل الدقة وAUC عن كل ساعة، والذي يسمح لنا أن نبحث عن القضايا التي تخص بعض ساعات دون غيرها.

في التصور أعلاه:

  • محاولة فرز عمود ميزة، وليس لدينا trip_start_hours ميزة، عن طريق النقر على رأس العمود
  • محاولة الفرز حسب الدقة، ولاحظ أن الدقة لبعض الساعات مع أمثلة 0، والتي قد تشير إلى وجود مشكلة

كما يسمح الرسم البياني لنا لتحديد وعرض مقاييس مختلفة في شرائح لدينا.

  • حاول تحديد مقاييس مختلفة من القائمة "عرض"
  • حاول تحديد نذكر في القائمة "عرض"، ولاحظ أن استدعاء لبعض ساعات مع الأمثلة هو 0، والتي قد تشير إلى وجود مشكلة

ومن الممكن أيضا لتحديد عتبة لتصفية شرائح مع عدد أقل من الأمثلة، أو "الأوزان". يمكنك كتابة رقم الحد الأدنى من الأمثلة، أو استخدام شريط التمرير.

مقاييس الرسم البياني

هذا الرأي أيضا يدعم مقاييس الرسم البياني باعتباره التصور البديل، الذي هو أيضا طريقة العرض الافتراضية عندما يكون عدد شرائح كبيرة. وسيتم تقسيم النتائج في الدلاء و/ على حد سواء يمكن تصور عدد من شرائح / مجموع الأوزان. الأعمدة يمكن فرزها من خلال النقر على رأس العمود. شرائح مع الأوزان الصغيرة يمكن أن تخرج عن طريق تحديد العتبة. مزيد من تصفية يمكن تطبيقها عن طريق سحب شريط الرمادية. لإعادة تعيين مجموعة، انقر نقرا مزدوجا فوق الفرقة. ويمكن أيضا أن تستخدم تصفية لإزالة القيم المتطرفة في التصور والجداول المقاييس. انقر على رمز الترس إلى التحول إلى مقياس لوغاريتمي بدلا من مقياس خطي.

  • حاول اختيار "القياسات الرسم البياني" في القائمة التصور

عن شرائح

دعونا خلق على قائمة كاملة من SliceSpec ، والتي سوف تسمح لنا لتحديد أي من شرائح في القائمة. سنقوم بتحديد trip_start_day شريحة (أيام الأسبوع) عن طريق تحديد slice_idx إلى 1 . حاول تغيير slice_idx إلى 0 أو 2 وتشغيلها مرة أخرى لفحص شرائح مختلفة.

 slices = [tfma.slicer.SingleSliceSpec(columns=['trip_start_hour']),
          tfma.slicer.SingleSliceSpec(columns=['trip_start_day']),
          tfma.slicer.SingleSliceSpec(columns=['trip_start_month'])]
run_and_render(eval_model=eval_shared_model_0, slice_list=slices, slice_idx=1)
 
WARNING:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Deleting 1 existing files in target path matching: 
WARNING:root:Deleting 1 existing files in target path matching: 
WARNING:root:Deleting 1 existing files in target path matching: 

SlicingMetricsViewer(config={'weightedExamplesColumn': 'post_export_metrics/example_count'}, data=[{'slice': '…

يمكنك إنشاء تقاطعات ميزة لتحليل مزيج من الميزات. دعونا خلق SliceSpec إلى نظرة على كرة عرضية من trip_start_day و trip_start_hour :

 slices = [tfma.slicer.SingleSliceSpec(columns=['trip_start_day', 'trip_start_hour'])]
run_and_render(eval_shared_model_0, slices, 0)
 
WARNING:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Deleting 1 existing files in target path matching: 
WARNING:root:Deleting 1 existing files in target path matching: 
WARNING:root:Deleting 1 existing files in target path matching: 

SlicingMetricsViewer(config={'weightedExamplesColumn': 'post_export_metrics/example_count'}, data=[{'slice': '…

عبور عمودين يخلق الكثير من تركيبات! دعونا تضييق أسفل لدينا الصليب لننظر فقط في الرحلات التي تبدأ عند الظهر. ثم دعونا اختيار accuracy من التصور:

 slices = [tfma.slicer.SingleSliceSpec(columns=['trip_start_day'], features=[('trip_start_hour', 12)])]
run_and_render(eval_shared_model_0, slices, 0)
 
WARNING:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:root:Deleting 1 existing files in target path matching: 
WARNING:root:Deleting 1 existing files in target path matching: 
WARNING:root:Deleting 1 existing files in target path matching: 

SlicingMetricsViewer(config={'weightedExamplesColumn': 'post_export_metrics/example_count'}, data=[{'slice': '…

تتبع نموذج الأداء على مر الزمن

وسيتم استخدام بيانات التدريب الخاص بك لتدريب النموذج الخاص بك، ونأمل أن تكون تمثيلية من بيانات الاختبار والبيانات التي سيتم إرسالها إلى النموذج الخاص بك في الإنتاج. ومع ذلك، في حين أن البيانات في طلبات الاستدلال قد تبقى نفس بيانات التدريب الخاص بك، في كثير من الحالات، سوف تبدأ في تغيير ما يكفي لذلك أن أداء النموذج الخاص بك سوف تتغير.

وهذا يعني أن تحتاج إلى مراقبة وقياس أداء النموذج الخاص بك بشكل مستمر، بحيث يمكنك أن تكون على علم والاستجابة للتغيرات. دعونا نلقي نظرة على كيف يمكن TFMA مساعدة.

قياس الأداء للبيانات جديد

نحن تحميلها نتائج ثلاثة أشواط التدريب المختلفة أعلاه، لذلك دعونا الحمل ومنهم الآن، واستخدام TFMA لنرى كيف أنها مقارنة باستخدام render_time_series . يمكننا تحديد شرائح معينة للنظر في. دعونا نقارن يعمل تدريبنا للرحلات التي بدأت ظهرا.

  • حدد مقياسا من القائمة المنسدلة لإضافة الرسم البياني السلاسل الزمنية لهذا المقياس
  • وثيقة الرسوم البيانية غير المرغوب فيها
  • ضع مؤشر الفأرة فوق نقاط البيانات (نهايات شرائح الخط في الرسم البياني) للحصول على مزيد من التفاصيل
 def get_eval_result(base_dir, output_dir, data_loc, slice_spec):
  eval_model_dir = os.path.join(base_dir, next(os.walk(base_dir))[1][0])
  eval_shared_model = tfma.default_eval_shared_model(eval_saved_model_path=eval_model_dir)

  return tfma.run_model_analysis(eval_shared_model=eval_shared_model,
                                          data_location=data_loc,
                                          file_format='tfrecords',
                                          slice_spec=slice_spec,
                                          output_path=output_dir,
                                          extractors=None)

slices = [tfma.slicer.SingleSliceSpec()]
output_dir_0 = os.path.join(TFMA_DIR, 'output', 'run_0')
result_ts0 = get_eval_result(os.path.join(TFMA_DIR, 'run_0', 'eval_model_dir'),
                             output_dir_0, TFRecord_file, slices)
output_dir_1 = os.path.join(TFMA_DIR, 'output', 'run_1')
result_ts1 = get_eval_result(os.path.join(TFMA_DIR, 'run_1', 'eval_model_dir'),
                             output_dir_1, TFRecord_file, slices)
output_dir_2 = os.path.join(TFMA_DIR, 'output', 'run_2')
result_ts2 = get_eval_result(os.path.join(TFMA_DIR, 'run_2', 'eval_model_dir'),
                             output_dir_2, TFRecord_file, slices)
 
WARNING:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

INFO:tensorflow:Restoring parameters from /tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir/1578507304/variables/variables

INFO:tensorflow:Restoring parameters from /tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_0/eval_model_dir/1578507304/variables/variables

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

INFO:tensorflow:Restoring parameters from /tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_1/eval_model_dir/1578507304/variables/variables

INFO:tensorflow:Restoring parameters from /tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_1/eval_model_dir/1578507304/variables/variables

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

Warning:tensorflow:Tensorflow version (2.2.0) found. Note that TFMA support for TF 2.0 is currently in beta

INFO:tensorflow:Restoring parameters from /tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_2/eval_model_dir/1578507304/variables/variables

INFO:tensorflow:Restoring parameters from /tmp/tmpgq6r13oe/eval_saved_models-0.15.0/run_2/eval_model_dir/1578507304/variables/variables

كيف تبدو اليوم؟

أولا، سنقوم نتصور أن لدينا تدريب ونشر نموذجنا أمس، والآن نريد أن نرى كيف يفعل على البيانات الجديدة القادمة في اليوم. وسيبدأ التصوير من خلال عرض دقة. إضافة AUC ومتوسط ​​الخسارة باستخدام "إضافة سلسلة متري" القائمة.

 eval_results_from_disk = tfma.load_eval_results([output_dir_0, output_dir_1],
                                                tfma.constants.MODEL_CENTRIC_MODE)

tfma.view.render_time_series(eval_results_from_disk, slices[0])
 
TimeSeriesViewer(config={'isModelCentric': True}, data=[{'metrics': {'': {'': {'precision': {'doubleValue': 0.…

الآن سنقوم تخيل أن يوم آخر قد مرت ونحن نريد أن نرى كيف يفعل على البيانات الجديدة القادمة في اليوم، مقارنة مع اليومين السابقين. مرة أخرى إضافة AUC ومتوسط ​​الخسارة باستخدام القائمة "إضافة سلسلة متري":

 eval_results_from_disk = tfma.load_eval_results([output_dir_0, output_dir_1, output_dir_2],
                                                tfma.constants.MODEL_CENTRIC_MODE)

tfma.view.render_time_series(eval_results_from_disk, slices[0])
 
TimeSeriesViewer(config={'isModelCentric': True}, data=[{'metrics': {'': {'': {'label/mean': {'doubleValue': 0…