این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

معیارهای تحلیل مدل Tensorflow

بررسی اجمالی

TFMA از معیارهای زیر پشتیبانی می کند:

  • معیارهای استاندارد استاندارد ( tf.keras.metrics.* )
    • توجه داشته باشید که برای استفاده از معیارهای keras نیازی به مدل کارسا ندارید. اندازه گیری ها با استفاده از کلاس های اندازه گیری به طور مستقیم در خارج از نمودار در پرتو محاسبه می شوند.
  • معیارهای استاندارد TFMA ( tfma.metrics.* )
  • معیارهای دوربین های سفارشی (معیارهای حاصل از tf.keras.metrics.Metric )
  • معیارهای سفارشی TFMA (معیارهای حاصل از tfma.metrics.Metric با استفاده از ترکیب کننده های پرتوی سفارشی یا معیارهای حاصل از معیارهای دیگر).

TFMA همچنین پشتیبانی داخلی برای تبدیل معیارهای طبقه بندی باینری برای استفاده با مشکلات چند طبقه / چند برچسب فراهم می کند:

  • binarization بر اساس شناسه کلاس ، K بالا ، و غیره
  • معیارهای تجمیع شده مبتنی بر میکرو میانگین ، کلان میانگین و غیره

TFMA همچنین پشتیبانی داخلی را برای معیارهای مبتنی بر پرس و جو / رتبه بندی فراهم می کند که نمونه ها توسط یک کلید پرس و جو به صورت خودکار در خط لوله گروه بندی می شوند.

ترکیب بیش از 50+ معیارهای استاندارد و توطئه های استاندارد برای انواع مشکلات از جمله رگرسیون ، طبقه بندی باینری ، طبقه بندی چند طبقه / چند برچسب ، رتبه بندی و غیره در دسترس است.

پیکربندی

دو روش برای پیکربندی معیارها در TFMA وجود دارد: (1) با استفاده از MetricsSpec proto یا (2) با ایجاد نمونه هایی از tf.keras.metrics.* و / یا tfma.metrics.* کلاس های موجود در Python و استفاده از tfma.metrics.specs_from_metrics برای تبدیل آنها به MetricsSpecs.

بخش های زیر تنظیمات نمونه را برای انواع مختلف مشکلات یادگیری ماشین شرح می دهد.

معیارهای رگرسیون

در زیر نمونه ای از تنظیمات پیکربندی برای یک مشکل رگرسیون است. برای معیارهای اضافی احتمالی پشتیبانی از ماژول های tf.keras.metrics.* و tfma.metrics.* .

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "WeightedExampleCount" }
    metrics { class_name: "MeanSquaredError" }
    metrics { class_name: "Accuracy" }
    metrics { class_name: "MeanLabel" }
    metrics { class_name: "MeanPrediction" }
    metrics { class_name: "Calibration" }
    metrics {
      class_name: "CalibrationPlot"
      config: '"min_value": 0, "max_value": 10'
    }
  }
""", tfma.EvalConfig()).metrics_specs

همین راه اندازی با استفاده از کد پایتون زیر قابل ایجاد است:

metrics = [
    tfma.metrics.ExampleCount(name='example_count'),
    tfma.metrics.WeightedExampleCount(name='weighted_example_count'),
    tf.keras.metrics.MeanSquaredError(name='mse'),
    tf.keras.metrics.Accuracy(name='accuracy'),
    tfma.metrics.MeanLabel(name='mean_label'),
    tfma.metrics.MeanPrediction(name='mean_prediction'),
    tfma.metrics.Calibration(name='calibration'),
    tfma.metrics.CalibrationPlot(
        name='calibration', min_value=0, max_value=10)
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

توجه داشته باشید که با تنظیم کردن tfma.metrics.default_regression_specs این راه اندازی نیز در دسترس است.

معیارهای طبقه بندی دودویی

در زیر نمونه تنظیمات پیکربندی یک مشکل طبقه بندی باینری است. برای معیارهای اضافی احتمالی پشتیبانی از ماژول های tf.keras.metrics.* و tfma.metrics.* .

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "WeightedExampleCount" }
    metrics { class_name: "BinaryCrossentropy" }
    metrics { class_name: "BinaryAccuracy" }
    metrics { class_name: "AUC" }
    metrics { class_name: "AUCPrecisionRecall" }
    metrics { class_name: "MeanLabel" }
    metrics { class_name: "MeanPrediction" }
    metrics { class_name: "Calibration" }
    metrics { class_name: "ConfusionMatrixPlot" }
    metrics { class_name: "CalibrationPlot" }
  }
""", tfma.EvalConfig()).metrics_specs

همین راه اندازی با استفاده از کد پایتون زیر قابل ایجاد است:

metrics = [
    tfma.metrics.ExampleCount(name='example_count'),
    tfma.metrics.WeightedExampleCount(name='weighted_example_count'),
    tf.keras.metrics.BinaryCrossentropy(name='binary_crossentropy'),
    tf.keras.metrics.BinaryAccuracy(name='accuracy'),
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    tf.keras.metrics.AUC(
        name='auc_precision_recall', curve='PR', num_thresholds=10000),
    tf.keras.metrics.Precision(name='precision'),
    tf.keras.metrics.Recall(name='recall'),
    tfma.metrics.MeanLabel(name='mean_label'),
    tfma.metrics.MeanPrediction(name='mean_prediction'),
    tfma.metrics.Calibration(name='calibration'),
    tfma.metrics.ConfusionMatrixPlot(name='confusion_matrix_plot'),
    tfma.metrics.CalibrationPlot(name='calibration_plot')
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

توجه داشته باشید که با تنظیم کردن tfma.metrics.default_binary_classification_specs این تنظیم نیز در دسترس است.

معیارهای طبقه بندی چند طبقه / چند برچسب

در زیر نمونه ای از تنظیمات پیکربندی برای یک مشکل طبقه بندی چند طبقه است. برای معیارهای اضافی احتمالی پشتیبانی از ماژول های tf.keras.metrics.* و tfma.metrics.* .

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "WeightedExampleCount" }
    metrics { class_name: "SparseCategoricalCrossentropy" }
    metrics { class_name: "SparseCategoricalAccuracy" }
    metrics { class_name: "Precision" config: '"top_k": 1' }
    metrics { class_name: "Precision" config: '"top_k": 3' }
    metrics { class_name: "Recall" config: '"top_k": 1' }
    metrics { class_name: "Recall" config: '"top_k": 3' }
    metrics { class_name: "MultiClassConfusionMatrixPlot" }
  }
""", tfma.EvalConfig()).metrics_specs

همین راه اندازی با استفاده از کد پایتون زیر قابل ایجاد است:

metrics = [
    tfma.metrics.ExampleCount(name='example_count'),
    tfma.metrics.WeightedExampleCount(name='weighted_example_count'),
    tf.keras.metrics.SparseCategoricalCrossentropy(
        name='sparse_categorical_crossentropy'),
    tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy'),
    tf.keras.metrics.Precision(name='precision', top_k=1),
    tf.keras.metrics.Precision(name='precision', top_k=3),
    tf.keras.metrics.Recall(name='recall', top_k=1),
    tf.keras.metrics.Recall(name='recall', top_k=3),
    tfma.metrics.MultiClassConfusionMatrixPlot(
        name='multi_class_confusion_matrix_plot'),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

توجه داشته باشید که با تنظیم کردن tfma.metrics.default_multi_class_classification_specs این تنظیم نیز در دسترس است.

Metrics Binarized Multi-class / Multi label

چند کلاس / چند برچسب معیارهای می توان binarized به تولید معیارهای در هر کلاس، در هر top_k، و غیره با استفاده از tfma.BinarizationOptions . مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    binarize: { class_ids: { values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } }
    // Metrics to binarize
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

همین راه اندازی با استفاده از کد پایتون زیر قابل ایجاد است:

metrics = [
    // Metrics to binarize
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, binarize=tfma.BinarizationOptions(
        class_ids={'values': [0,1,2,3,4,5,6,7,8,9]}))

اندازه گیری های چند طبقه / چند برچسب جمع

معیارهای چند طبقه / چند برچسب را می توان برای تولید یک مقدار واحد برای یک متریک طبقه بندی دودویی جمع کرد.

متوسط ​​متوسط

میانگین میکرو می تواند یا به طور مستقل و یا به عنوان بخشی از یک binarization از معیارهای با استفاده از انجام micro_average گزینه در tfma.AggregationOptions . مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    aggregate: { micro_average: true }
    // Metrics to aggregate
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

همین راه اندازی با استفاده از کد پایتون زیر قابل ایجاد است:

metrics = [
    // Metrics to aggregate
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, aggregate=tfma.AggregationOptions(micro_average=True))

کلان / متوسط ​​وزن ماکرو

میانگین ماکرو باید به عنوان بخشی از binarization کردن معیارها در رابطه با گزینه های maro_average یا weighted_macro_average tfma.AggregationOptions در tfma.AggregationOptions . مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    binarize: { class_ids: { values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } }
    aggregate: { macro_average: true }
    // Metrics to both binarize and aggregate
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

همین راه اندازی با استفاده از کد پایتون زیر قابل ایجاد است:

metrics = [
    // Metrics to both binarize and aggregate
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics,
    binarize=tfma.BinarizationOptions(
        class_ids={'values': [0,1,2,3,4,5,6,7,8,9]}),
    aggregate=tfma.AggregationOptions(macro_average=True))

معیارهای پرس و جو / رتبه بندی مبتنی بر رتبه بندی

معیارهای مبتنی بر پرس و جو / رتبه بندی با مشخص کردن گزینه query_key در مشخصات معیارها فعال می شوند. مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    query_key: "doc_id"
    binarize { top_k_list: { values: [1, 2] } }
    metrics { class_name: "NDCG" config: '"gain_key": "gain"' }
  }
  metrics_specs {
    query_key: "doc_id"
    metrics { class_name: "MinLabelPosition" }
  }
""", tfma.EvalConfig()).metrics_specs

همین راه اندازی با استفاده از کد پایتون زیر قابل ایجاد است:

metrics = [
    tfma.metrics.NDCG(name='ndcg', gain_key='gain'),
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, query_key='doc_id', binarize=tfma.BinarizationOptions(
        top_k_list={'values': [1,2]}))

metrics = [
    tfma.metrics.MinLabelPosition(name='min_label_position')
]
metrics_specs.extend(
    tfma.metrics.specs_from_metrics(metrics, query_key='doc_id'))

معیارهای ارزیابی چند مدل

TFMA از ارزیابی چندین مدل به طور همزمان پشتیبانی می کند. هنگامی که ارزیابی چند مدل انجام می شود ، معیارها برای هر مدل محاسبه می شود. مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    # no model_names means all models
    ...
  }
""", tfma.EvalConfig()).metrics_specs

اگر نیاز به اندازه گیری متریک ها برای زیرمجموعه های مدل ها وجود دارد ، model_names در metric_specs . مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    model_names: ["my-model1"]
    ...
  }
""", tfma.EvalConfig()).metrics_specs

specs_from_metrics API همچنین از نام های مدل عبور می کند:

metrics = [
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, model_names=['my-model1'])

معیارهای مقایسه مدل

TFMA از ارزیابی معیارهای مقایسه برای یک مدل نامزد در برابر یک مدل پایه پشتیبانی می کند. یک روش ساده برای تنظیم نامزد و جفت مدل پایه این است که در امتداد یک eval_shared_model با نام های مدل مناسب (tfma.BASELINE_KEY و tfma.CANDIDATE_KEY) عبور کنید:


eval_config = text_format.Parse("""
  model_specs {
    # ... model_spec without names ...
  }
  metrics_spec {
    # ... metrics ...
  }
""", tfma.EvalConfig())

eval_shared_models = [
  tfma.default_eval_shared_model(
      model_name=tfma.CANDIDATE_KEY,
      eval_saved_model_path='/path/to/saved/candiate/model',
      eval_config=eval_config),
  tfma.default_eval_shared_model(
      model_name=tfma.BASELINE_KEY,
      eval_saved_model_path='/path/to/saved/baseline/model',
      eval_config=eval_config),
]

eval_result = tfma.run_model_analysis(
    eval_shared_models,
    eval_config=eval_config,
    # This assumes your data is a TFRecords file containing records in the
    # tf.train.Example format.
    data_location="/path/to/file/containing/tfrecords",
    output_path="/path/for/output")

معیارهای مقایسه به طور خودکار برای کلیه معیارهای دارای توانایی متفاوت محاسبه می شوند (در حال حاضر فقط معیارهای مقیاس سنجی مانند دقت و AUC).

معیارهای مدل چند خروجی

TFMA از ارزیابی معیارهای مدلهایی که دارای خروجی های مختلف هستند پشتیبانی می کند. مدل های چند خروجی پیش بینی های خروجی خود را در قالب دیکتیکی با نام خروجی ذخیره می کنند. هنگامی که از مدل چند خروجی استفاده می شود ، باید نام خروجی های مرتبط با مجموعه ای از معیارها در بخش output_names از MetricsSpec مشخص شود. مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    output_names: ["my-output"]
    ...
  }
""", tfma.EvalConfig()).metrics_specs

specs_from_metrics API همچنین از نامهای خروجی پشتیبانی می کند:

metrics = [
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, output_names=['my-output'])

تنظیمات متریک

TFMA اجازه سفارشی سازی تنظیمات مورد استفاده در معیارهای مختلف را می دهد. به عنوان مثال ممکن است بخواهید نام را تغییر دهید ، آستانه ها را تنظیم کنید و غیره. این کار با اضافه کردن یک بخش config به پیکربندی متریک انجام می شود. پیکربندی با استفاده از نسخه رشته JSON پارامترهایی که می تواند به روش __init__ معیارها منتقل شود (برای سهولت در کاربری ممکن است براکت های "leading" و دنباله دار دنباله دار و حذف شده حذف شوند). مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics {
      class_name: "ConfusionMatrixAtThresholds"
      config: '"thresholds": [0.3, 0.5, 0.8]'
    }
  }
""", tfma.MetricsSpec()).metrics_specs

البته این شخصی سازی نیز مستقیماً پشتیبانی می شود:

metrics = [
   tfma.metrics.ConfusionMatrixAtThresholds(thresholds=[0.3, 0.5, 0.8]),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

خروجی ها

خروجی یک ارزیابی متریک یک سری کلیدها / مقادیر متریک و / یا کلیدهای ترسیمی / مقادیر بر اساس پیکربندی مورد استفاده است.

کلیدهای متریک

MetricKeys با استفاده از یک نوع کلید ساختاری تعریف می شوند. این کلید به طور منحصر به فرد هر یک از جنبه های زیر یک متریک را مشخص می کند:

  • نام متریک ( auc ، mean_label و غیره)
  • نام مدل (فقط در صورت ارزیابی چند مدل مورد استفاده قرار می گیرد)
  • نام خروجی (فقط در صورت ارزیابی مدلهای چند خروجی مورد استفاده قرار می گیرد)
  • کلید زیر (به عنوان مثال شناسه کلاس اگر مدل چند طبقه دوتایی باشد)

مقدار متریک

MetricValues با استفاده از proto تعریف شده است که انواع مختلفی از متغیرهای مختلف را پشتیبانی می کند (مثلاً double ، ConfusionMatrixAtThresholds و غیره).

در زیر انواع مقدار متریک پشتیبانی شده وجود دارد:

  • double_value - بسته بندی برای نوع دوتایی.
  • bytes_value - مقدار بایت.
  • bounded_value - یک مقدار واقعی را نشان می دهد که می تواند یک تخمین نقطه ای باشد ، اختیاری با حدود تقریبی نوعی. دارای خواص value ، lower_bound و upper_bound .
  • value_at_cutoffs - ارزش در قطع (به عنوان مثال دقت @ K ، به یاد بیاورید @ K). دارای values خاصیت است که هرکدام دارای خواص cutoff و value .
  • confusion_matrix_at_thresholds - ماتریس سردرگمی در آستانه. دارای matrices خاصیت matrices که هر کدام دارای خواصی برای مقادیر threshold ، precision ، recall و مقادیر ماتریس سردرگمی مانند false_negatives .
  • array_value - برای معیارهایی که مجموعه ای از مقادیر را برمی گردانند.

کلیدهای طرح

PlotKey ها شبیه به کلیدهای متریک هستند به جز اینکه به دلایل تاریخی تمام مقادیر توطئه ها در یک پروتوت واحد ذخیره می شوند بنابراین کلید طرح نامی ندارد.

مقادیر طرح

تمام توطئه های پشتیبانی شده در یک تک نگاره به نام PlotData ذخیره می شوند.

EvalResult

بازگشت از اجرای ارزیابی یک EvalResult است . این رکورد شامل slicing_metrics که کلید متریک را به عنوان یک دستور چند سطح رمزگذاری می کند که در آن سطح به ترتیب با نام خروجی ، شناسه کلاس ، نام متریک و مقدار متریک مطابقت دارد. این در نظر گرفته شده است تا برای نمایش UI در یک نوت بوک مشتری استفاده شود. اگر دسترسی به داده های اساسی مورد نیاز است metrics نتیجه فایل باید به جای استفاده می شود (نگاه کنید به metrics_for_slice.proto ).

سفارشی سازی

علاوه بر معیارهای سفارشی که به عنوان بخشی از دوربینهای ذخیره شده (یا میراث EvalSavedModel) اضافه می شوند. دو روش برای سفارشی کردن اندازه گیری ها در صرفه جویی در ارسال TFMA وجود دارد: (1) با تعریف یک کلاس متریک متناوب کارا و (2) با تعریف یک کلاس متریک سفارشی TFMA با پشتیبان یک پرنده.

در هر دو حالت ، معیارها با مشخص کردن نام کلاس متریک و ماژول مرتبط پیکربندی می شوند. مثلا:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "MyMetric" module: "my.module"}
  }
""", tfma.EvalConfig()).metrics_specs

اندازه گیری سفارشی Keras

برای ایجاد یک متریک keras سفارشی ، کاربران باید با اجرای خود tf.keras.metrics.Metric گسترش دهند و سپس اطمینان حاصل کنند که ماژول متریک در زمان ارزیابی در دسترس است.

توجه داشته باشید که برای معیارهای اضافه شده در مدل post صرفه جویی ، TFMA فقط از معیارهایی استفاده می کند که برچسب (یعنی y_true) ، پیش بینی (y_pred) و وزن نمونه (نمونه_ وزن) را به عنوان پارامترهای روش update_state .

مثال متریک کراس

در زیر نمونه ای از متریک دوربین های دلخواه:

class MyMetric(tf.keras.metrics.Mean):

  def __init__(self, name='my_metric', dtype=None):
    super(MyMetric, self).__init__(name=name, dtype=dtype)

  def update_state(self, y_true, y_pred, sample_weight=None):
    return super(MyMetric, self).update_state(
        y_pred, sample_weight=sample_weight)

اندازه گیری های TFMA سفارشی

برای ایجاد یک متریک TFMA سفارشی ، کاربران باید با اجرای خود tfma.metrics.Metric گسترش دهند و سپس اطمینان حاصل کنند که ماژول متریک در زمان ارزیابی در دسترس است.

متریک

پیاده سازی tfma.metrics.Metric از مجموعه ای از kwargs ساخته شده است که پیکربندی اندازه گیری ها را به همراه تابعی برای ایجاد محاسبات (احتمالاً چندین) مورد نیاز برای محاسبه مقدار اندازه گیری تعریف می کند. دو نوع محاسبات اصلی وجود دارد که می توان از آنها استفاده کرد: tfma.metrics.MetricComputation و tfma.metrics.DerivedMetricComputation که در بخش های زیر توضیح داده شده است. عملکردی که این محاسبات را ایجاد می کند ، پارامترهای زیر به عنوان ورودی منتقل می شود:

  • eval_config: tfam.EvalConfig
    • پیکربندی Eval به ارزیاب منتقل شد (برای جستجوی تنظیمات مشخصات مدل مانند کلید پیش بینی برای استفاده و موارد دیگر).
  • model_names: List[Text]
    • لیست اسامی مدل ها برای محاسبه معیارها برای (هیچ یک اگر یک نفره باشد)
  • output_names: List[Text] .
    • لیست نامهای خروجی برای محاسبه معیارها برای (هیچ یک در صورت تک مدل)
  • sub_keys: List[tfma.SubKey] .
    • لیست کلیدهای زیر (شناسه کلاس ، K بالا ، و غیره) برای محاسبه معیارهای مربوط به (یا هیچ)
  • class_weights: Dict[int, float] .
    • وزن کلاس برای استفاده در صورت محاسبه یک متریک جمع آوری.
  • query_key: Text
    • کلید پرس و جو در صورت محاسبه یک متریک مبتنی بر پرس و جو / رتبه بندی استفاده می شود.

اگر یک متریک با یک یا چند مورد از این تنظیمات در ارتباط نباشد ، ممکن است آن پارامترها را از تعریف امضای خود خارج کند.

اگر یک متریک برای هر مدل ، خروجی و کلید زیر به همان روش محاسبه شود ، می توان از ابزار tfma.metrics.merge_per_key_computations برای انجام محاسبات یکسان برای هر یک از این ورودی ها بطور جداگانه استفاده کرد.

محاسبات متریک

MetricComputation از ترکیبی از preprocessor و یک combiner . preprocessor یک beam.DoFn که عصاره را به عنوان ورودی خود در می آورد و حالت اولیه را که توسط استفاده کننده استفاده می شود خروجی می دهد (برای اطلاعات بیشتر در مورد عصاره ها به معماری مراجعه کنید). اگر preprocessor ای تعریف نشده باشد ، در آن صورت به ترکیب دهنده استاندارد ( StandardMetricInputs) منتقل می شود (ورودی های متریک استاندارد شامل برچسب ها ، پیش بینی ها و مثال های_تعاریف). این combiner beam.CombineFn که به عنوان ورودی از یک کلید بزرگ برش ، خروجی پیش پردازنده) استفاده می کند و یک نتیجه از آن (slice_key ، نتایج متریک) را به دست می آورد.

توجه داشته باشید که برش بین preprocessor و combiner اتفاق می افتد.

توجه داشته باشید که اگر یک محاسبه متریک بخواهد از هر دو ورودی متریک استاندارد استفاده کند اما با چند مورد از عصاره features آن را تقویت کند ، می توان از پردازشگر ویژه FeaturePre استفاده کرد که ویژگی های درخواستی را از چندین ترکیب دهنده به یک واحد ادغام می کند. مقدار مشترک StandardMetricsInputs را که به تمام ترکیب دهنده ها منتقل می شود (ترکیب کننده ها مسئول خواندن ویژگی های مورد علاقه آنها و نادیده گرفتن بقیه هستند).

مثال

در زیر نمونه ای بسیار ساده از تعریف متریک TFMA برای محاسبه مثالCount:

class ExampleCount(tfma.metrics.Metric):

  def __init__(self, name: Text = 'example_count'):
    super(ExampleCount, self).__init__(_example_count, name=name)


def _example_count(
    name: Text = 'example_count') -> tfma.metrics.MetricComputations:
  key = tfma.metrics.MetricKey(name=name)
  return [
      tfma.metrics.MetricComputation(
          keys=[key],
          preprocessor=_ExampleCountPreprocessor(),
          combiner=_ExampleCountCombiner(key))
  ]


class _ExampleCountPreprocessor(beam.DoFn):

  def process(self, extracts: tfma.Extracts) -> Iterable[int]:
    yield 1


class _ExampleCountCombiner(beam.CombineFn):

  def __init__(self, metric_key: tfma.metrics.MetricKey):
    self._metric_key = metric_key

  def create_accumulator(self) -> int:
    return 0

  def add_input(self, accumulator: int, state: int) -> int:
    return accumulator + state

  def merge_accumulators(self, accumulators: List[int]) -> int:
    result = 0
    for accumulator in accumulators:
      result += accumulator
    return result

  def extract_output(self,
                     accumulator: int) -> Dict[tfma.metrics.MetricKey, int]:
    return {self._metric_key: accumulator}

DerivedMetricComputation

DerivedMetricComputation از یک تابع نتیجه ساخته شده است که برای محاسبه مقادیر متریک بر اساس خروجی سایر محاسبات متریک استفاده می شود. تابع نتیجه به عنوان ورودی از مقادیر محاسبه شده استفاده می کند و یک نتیجه از نتایج متریک اضافی را به دست می آورد.

توجه داشته باشید که قابل قبول (توصیه می شود) محاسباتی را که محاسبه مشتق شده به آن در لیست محاسبات ایجاد شده توسط یک متریک بستگی دارد ، بپذیرد. از این کار نیازی به پیش ایجاد و عبور محاسباتی که بین چندین معیار به اشتراک گذاشته می شود نیست. ارزیاب به طور خودکار محاسبات را که تعریف مشابهی دارند از بین می برد بنابراین یک محاسبات در واقع اجرا می شود.

مثال

معیارهای TJUR مثال خوبی از معیارهای مشتق شده را نشان می دهد.