Посмотреть на TensorFlow.org | Запускаем в Google Colab | Посмотреть исходный код на GitHub | Скачать блокнот |
Пример ключевого компонента TensorFlow Extended (TFX)
TensorFlow Модель анализ (TFMA) представляет собой библиотеку для проведения оценки модели в различных срезах данных. TFMA выполняет свои вычисления распределенным образом над большими объемами данных с использованием Apache Beam .
В этом примере записной книжки Colab показано, как можно использовать TFMA для исследования и визуализации производительности модели по отношению к характеристикам набора данных. Мы будем использовать модель, которую мы обучили ранее, и теперь вы можете поиграть с результатами! Модель , которую мы обучен была для Чикаго такси примера , который использует такси Trips набор данных выпущен городом Чикаго. Исследуйте полный набор данных в BigQuery UI .
Как модельер и разработчик, подумайте о том, как используются эти данные, и о потенциальных преимуществах и вреде, которые могут принести прогнозы модели. Подобная модель может усилить социальные предубеждения и неравенства. Относится ли функция к проблеме, которую вы хотите решить, или она внесет предвзятость? Для получения более подробной информации читайте о ML справедливости .
Столбцы в наборе данных:
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 --sys-prefix
jupyter nbextension install --py --symlink tensorflow_model_analysis --sys-prefix
jupyter nbextension enable --py tensorflow_model_analysis --sys-prefix
Установите TensorFlow Model Analysis (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.4.4 Beam version: 2.34.0 TFMA version: 0.29.0
Загрузить файлы
Мы скачаем tar-файл, в котором есть все, что нам нужно. Это включает:
- Наборы данных для обучения и оценки
- Схема данных
- Обучение и обслуживание сохраненных моделей (keras и оценка) и оценка сохраненных моделей (оценка).
# 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
Разобрать схему
Среди вещей , которые мы скачали была схема для наших данных , которая была создана с помощью 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/tmp_at9q62d/train_data.rio
Настройка и запуск TFMA
TFMA поддерживает ряд различных типов моделей, включая модели TF keras, модели, основанные на общих API подписи TF2, а также модели на основе оценки TF. Get_started руководство имеет полный список типов моделей , поддерживаемых и каких - либо ограничений. В этом примере мы собираемся показать , как настроить keras модель на основе, а также на основе модели оценивани , которая была сохранена как EvalSavedModel
. Смотрите FAQ для примеров других конфигураций.
TFMA обеспечивает поддержку для расчета показателей, которые использовались во время обучения (т. Е. Встроенных показателей), а также показателей, определенных после сохранения модели как часть настроек конфигурации TFMA. Для нашего keras установки мы продемонстрируем , добавив наши показатели и графики вручную , как часть нашей конфигурации (см метрик руководства для получения информации о метриках и графиках, которые поддерживаются). Для настройки оценщика мы будем использовать встроенные метрики, которые были сохранены вместе с моделью. Наши настройки также включают ряд спецификаций нарезки, которые более подробно обсуждаются в следующих разделах.
После создания tfma.EvalConfig
и tfma.EvalSharedModel
мы можем запустить TFMA с помощью 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)
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)`
Оценщик
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.
Визуализация показателей и графиков
Теперь, когда мы выполнили оценку, давайте взглянем на наши визуализации с использованием TFMA. В следующих примерах мы визуализируем результаты выполнения оценки на модели keras. Для просмотра Оценщик на основе обновления Смоделируйте eval_result
к точке нашей estimator_eval_result
переменной.
eval_result = keras_eval_result
# eval_result = estimator_eval_result
Показатели рендеринга
Для просмотра метрик вы используете tfma.view.render_slicing_metrics
По умолчанию мнения будут отображаться Overall
срез. Для того, чтобы просмотреть конкретный фрагмент можно использовать либо имя столбца (путем установки slicing_column
) или предоставить tfma.SlicingSpec
.
Визуализация метрик поддерживает следующие взаимодействия:
- Щелкните и перетащите для панорамирования
- Прокрутите для увеличения
- Щелкните правой кнопкой мыши, чтобы сбросить вид
- Наведите указатель мыши на нужную точку данных, чтобы увидеть более подробную информацию.
- Выберите один из четырех различных типов представлений, используя кнопки внизу.
Например, мы будем установка slicing_column
смотреть на trip_start_hour
особенность наших предыдущих 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', …
Обзор срезов
Визуализация по умолчанию является Ломтики Обзора когда количество срезов мало. Он показывает значения метрик для каждого среза. Так как мы выбрали 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_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: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.
Во-первых, представим, что вчера мы обучили и развернули нашу модель, а теперь хотим посмотреть, как она работает с новыми данными, поступающими сегодня. Визуализация начнется с отображения 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 можно настроить для одновременной оценки нескольких моделей. Обычно это делается для сравнения новой модели с базовой линией (такой как текущая обслуживаемая модель), чтобы определить, какие различия в показателях производительности (например, AUC и т. Д.) Относятся к базовому уровню. Когда пороговые значения сконфигурированы, TFMA будет производить tfma.ValidationResult
запись , указывающую , соответствует ли производительность expecations.
Давайте переконфигурируем нашу оценку keras, чтобы сравнить две модели: кандидатную и базовую. Мы также проверить производительность кандидата от базовой линии, установив 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: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.
При выполнении оценок с одной или несколькими моделями относительно базовой линии, TFMA автоматически добавляет метрики сравнения для всех метрик, вычисленных во время оценки. Эти показатели были названы в честь соответствующей метрики , но с _diff
приложенном к метрическим имени.
Давайте посмотрим на показатели, полученные в ходе нашего прогона:
tfma.view.render_time_series(eval_result_with_validation)
TimeSeriesViewer(config={'isModelCentric': True}, data=[{'metrics': {'': {'': {'binary_accuracy': {'doubleValu…
Теперь давайте посмотрим на результаты наших проверок. Для просмотра результатов проверки мы используем tfma.load_validator_result
. В нашем примере проверка не удалась, потому что AUC ниже порогового значения.
validation_result = tfma.load_validation_result(validation_output_path)
print(validation_result.validation_ok)
False