Trang này được dịch bởi Cloud Translation API.
Switch to English

Phân tích mẫu TensorFlow

Một thí dụ về một phần chính của TensorFlow Extended (TFX)

máy tính xách tay ví dụ colab này minh họa cách TensorFlow mẫu phân tích (TFMA) có thể được sử dụng để điều tra và hình dung những đặc điểm của một tập dữ liệu và hiệu suất của một mô hình. Chúng tôi sẽ sử dụng một mô hình mà chúng tôi được đào tạo trước đây, và bây giờ bạn có thể chơi với kết quả!

Mô hình đào tạo chúng tôi đã cho Chicago Taxi Ví dụ , trong đó sử dụng Taxi Trips bộ dữ liệu phát hành bởi các thành phố Chicago.

Đọc thêm về bộ dữ liệu trong Google BigQuery . Khám phá bộ dữ liệu đầy đủ trong UI BigQuery .

Các cột trong tập dữ liệu là:

pickup_community_area giá 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 hình thức thanh toán Công ty
trip_seconds dropoff_community_area lời khuyên

Cài đặt Jupyter Extensions

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

Cài đặt Phân tích mẫu TensorFlow (TFMA)

Điều này sẽ kéo trong tất cả các phụ thuộc, và sẽ mất một phút. Hãy bỏ qua những lời cảnh báo.

 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

Tải các tập tin

Chúng tôi sẽ tải về một tập tin tar có tất cả mọi thứ chúng ta cần. Điều đó bao gồm:

  • Đào tạo và đánh giá bộ dữ liệu
  • schema dữ liệu
  • Đào tạo results as 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

Phân tích Schema

Trong số những điều chúng ta đã tải về là một schema cho dữ liệu của chúng tôi được tạo ra bởi TensorFlow Data Validation . Hãy phân tích cú pháp mà bây giờ để chúng tôi có thể sử dụng nó với 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)
 

Sử dụng lược đồ để tạo TFRecords

Chúng tôi cần phải cung cấp truy cập TFMA để dữ liệu của chúng tôi, vì vậy chúng ta hãy tạo một file TFRecords. Chúng ta có thể sử dụng sơ đồ của chúng tôi để tạo ra nó, vì nó cho chúng ta đúng loại cho mỗi đối tượng.

 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

Chạy TFMA và Render Metrics

Bây giờ chúng ta đã sẵn sàng để tạo ra một chức năng mà chúng ta sẽ sử dụng để chạy TFMA và đưa ra số liệu. Nó đòi hỏi một EvalSavedModel , một danh sách các SliceSpecs , và một chỉ số vào danh sách SliceSpec. Nó sẽ tạo ra một EvalResult sử dụng tfma.run_model_analysis , và sử dụng nó để tạo ra một SlicingMetricsViewer sử dụng tfma.view.render_slicing_metrics , mà sẽ làm cho một hình dung của tập dữ liệu của chúng tôi bằng cách sử dụng lát chúng tôi tạo ra.

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

Slicing và dicing

trước đây chúng tôi được đào tạo một mô hình, và bây giờ chúng tôi đã nạp kết quả. Chúng ta hãy nhìn vào hình tượng của chúng tôi, bắt đầu với việc sử dụng TFMA để lát cùng các tính năng đặc biệt. Nhưng trước tiên chúng ta cần phải đọc trong EvalSavedModel từ một trong chạy đào tạo trước đó của chúng tôi.

Lô là tương tác:

  • Nhấp và kéo để pan
  • Di chuyển đến zoom
  • Nhấp chuột phải để thiết lập lại quan điểm

Đơn giản chỉ cần di chuột qua các điểm dữ liệu mong muốn để xem thêm chi tiết. Chọn từ bốn loại khác nhau của âm mưu sử dụng các lựa chọn ở phía dưới.

Ví dụ, chúng tôi sẽ thiết lập slicing_column nhìn vào trip_start_hour tính năng trong chúng tôi 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': '…

lát Tổng quan

Các hình dung mặc định là Tổng quan Slices khi số lượng các lát nhỏ. Nó cho thấy các giá trị của số liệu cho mỗi lát. Vì chúng ta đã chọn trip_start_hour trên, nó cho chúng ta thấy số liệu như độ chính xác và AUC cho mỗi giờ, cho phép chúng ta tìm kiếm các vấn đề cụ thể cho một vài giờ và không phải người khác.

Trong hình dung trên:

  • Hãy thử sắp xếp cột tính năng, đó là chúng tôi trip_start_hours tính năng, bằng cách nhấp vào tiêu đề cột
  • Cố gắng sắp xếp theo độ chính xác, và thông báo rằng độ chính xác cho một số các giờ với các ví dụ là 0, mà có thể chỉ ra một vấn đề

Biểu đồ cũng cho phép chúng ta lựa chọn và hiển thị số liệu khác nhau trong lát của chúng tôi.

  • Hãy thử chọn số liệu khác nhau từ "Show" menu
  • Hãy thử chọn thu hồi trong "Show" trình đơn, và thông báo rằng việc thu hồi đối với một số giờ với các ví dụ là 0, mà có thể chỉ ra một vấn đề

Nó cũng có thể thiết lập một ngưỡng để lọc ra các lát với số lượng nhỏ các ví dụ, hay "trọng lượng". Bạn có thể gõ một số lượng tối thiểu các ví dụ, hoặc sử dụng các thanh trượt.

Metrics Histogram

Quan điểm này cũng hỗ trợ một Metrics Histogram như một hình dung khác, đó cũng là giao diện mặc định khi số lượng lát là lớn. Kết quả sẽ được chia thành xô và số lượng lát / tổng trọng lượng / cả hai có thể được hình tượng. Cột có thể được sắp xếp bằng cách nhấp vào tiêu đề cột. Lát với trọng lượng nhỏ có thể được lọc ra bằng cách thiết lập các ngưỡng. lọc có thể tiếp tục được áp dụng bằng cách kéo ban nhạc màu xám. Để thiết lập lại phạm vi, nhấn đúp chuột vào ban nhạc. Lọc cũng có thể được sử dụng để loại bỏ giá trị ngoại biên trong hiển thị và các bảng số liệu. Nhấp vào biểu tượng bánh răng để chuyển sang một quy mô lôgarít thay vì một quy mô tuyến tính.

  • Hãy thử chọn "Metrics Histogram" trong menu Visualization

hơn Slices

Hãy tạo một danh sách toàn bộ SliceSpec s, mà sẽ cho phép chúng ta chọn bất kỳ của những lát trong danh sách. Chúng tôi sẽ chọn trip_start_day lát (các ngày trong tuần) bằng cách thiết lập slice_idx đến 1 . Hãy thử thay đổi slice_idx để 0 hoặc 2 và chạy lại để kiểm tra lát khác nhau.

 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': '…

Bạn có thể tạo thánh giá tính năng để phân tích kết hợp các tính năng. Hãy tạo một SliceSpec để nhìn vào một cây thánh giá của trip_start_daytrip_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': '…

Vượt qua hai cột tạo ra rất nhiều kết hợp! Hãy thu hẹp chéo của chúng tôi chỉ nhìn vào các chuyến đi bắt đầu vào buổi trưa. Sau đó, hãy chọn của accuracy từ hình dung:

 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': '…

Theo dõi Mẫu Hiệu suất theo thời gian

tập dữ liệu đào tạo của bạn sẽ được sử dụng để huấn luyện các mô hình của bạn, và hy vọng sẽ là đại diện của tập dữ liệu thử nghiệm của bạn và dữ liệu đó sẽ được gửi đến mô hình của bạn trong sản xuất. Tuy nhiên, trong khi dữ liệu trong các yêu cầu suy luận có thể giữ nguyên như dữ liệu huấn luyện của mình, trong nhiều trường hợp nó sẽ bắt đầu thay đổi đủ để thực hiện các mô hình của bạn sẽ thay đổi.

Đó có nghĩa là bạn cần phải theo dõi và đo lường hiệu quả của mô hình của bạn một cách liên tục, vì vậy mà bạn có thể nhận thức được và phản ứng với những thay đổi. Chúng ta hãy xem xét cách TFMA thể giúp đỡ.

Đo Hiệu suất Đối với dữ liệu mới

Chúng tôi đã tải về kết quả của ba chạy đào tạo khác nhau ở trên, vì vậy hãy tải của chúng ngay bây giờ và sử dụng TFMA để xem cách họ so sánh sử dụng render_time_series . Chúng tôi có thể xác định lát đặc biệt để xem xét. Hãy so sánh chạy đào tạo của chúng tôi cho các chuyến đi mà bắt đầu vào buổi trưa.

  • Chọn số liệu từ menu thả xuống để thêm chuỗi thời gian biểu đồ cho số liệu
  • đồ thị không mong muốn gần gũi
  • Hover trên các điểm dữ liệu (hai đầu của đoạn đường trong đồ thị dưới) để biết thêm chi tiết
 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

Làm thế nào để cho nó trông ngày hôm nay?

Đầu tiên, chúng tôi sẽ tưởng tượng rằng chúng tôi đã được đào tạo và triển khai mô hình ngày hôm qua của chúng tôi, và bây giờ chúng tôi muốn xem làm thế nào nó được thực hiện trên các dữ liệu mới đến trong ngày hôm nay. Các trực quan sẽ bắt đầu bằng cách hiển thị chính xác. Thêm AUC và mất trung bình bằng cách sử dụng "Add loạt số liệu" menu.

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

Bây giờ chúng ta sẽ tưởng tượng rằng một ngày khác đã trôi qua và chúng ta muốn xem cách nó làm trên các dữ liệu mới đến ngày hôm nay, so với hai ngày trước đó. Một lần nữa thêm AUC và trung bình mất bằng cách sử dụng "Add loạt số liệu" menu:

 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…