معیارهای صادرات پست

همانطور که از نام آن پیداست، این معیاری است که پس از صادرات، قبل از ارزیابی اضافه می شود.

TFMA با چندین معیار ارزیابی از پیش تعریف شده، مانند example_count، auc، confusion_matrix_at_thresholds، precision_recall_at_k، mse، mae، بسته بندی شده است. (لیست کامل اینجاست .)

اگر معیارهای موجود مرتبط با مورد استفاده خود را پیدا نکردید، یا می‌خواهید معیاری را سفارشی کنید، می‌توانید معیارهای سفارشی خود را تعریف کنید. برای جزئیات بیشتر بخوانید!

اضافه کردن معیارهای سفارشی در TFMA

تعریف معیارهای سفارشی در TFMA 1.x

گسترش کلاس پایه Abstract

برای افزودن یک متریک سفارشی، یک کلاس جدید با گسترش کلاس انتزاعی _PostExportMetric ایجاد کنید و سازنده آن را تعریف کنید و متدهای انتزاعی / اجرا نشده را پیاده سازی کنید.

سازنده را تعریف کنید

در سازنده، تمام اطلاعات مرتبط مانند label_key، prediction_key، example_weight_key، metric_tag و غیره را که برای متریک سفارشی لازم است، به عنوان پارامتر در نظر بگیرید.

پیاده سازی چکیده / روش های اجرا نشده
  • check_compatibility

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

    • ویژگی های_دیکت
    • پیش بینی_دیکت
    • labels_dict

    این دیکشنری ها حاوی ارجاعاتی به Tensor برای مدل هستند.

  • get_metric_ops

    این روش را برای ارائه عملیات های متریک (مقدار و عملیات به روز رسانی) برای محاسبه متریک اجرا کنید. مشابه متد check_compatibility، سه آرگومان نیز می‌گیرد:

    • ویژگی های_دیکت
    • پیش بینی_دیکت
    • labels_dict

    منطق محاسبات متریک خود را با استفاده از این ارجاعات به Tensors برای مدل تعریف کنید.

  • populate_stats_and_pop و populate_plots_and_pop

    این معیار را برای تبدیل نتایج متریک خام به فرمت اولیه MetricValue و PlotData پیاده کنید. این به سه استدلال نیاز دارد:

    • slice_key: نام متریک برش به آن تعلق دارد.
    • Combined_metrics: فرهنگ لغت حاوی نتایج خام.
    • output_metrics: فرهنگ لغت خروجی حاوی متریک در قالب پروتو دلخواه.
@_export('my_metric')
class _MyMetric(_PostExportMetric):
   def __init__(self,
                target_prediction_keys: Optional[List[Text]] = None,
                labels_key: Optional[Text] = None,
                metric_tag: Optional[Text] = None):
      self._target_prediction_keys = target_prediction_keys
      self._label_keys = label_keys
      self._metric_tag = metric_tag
      self._metric_key = 'my_metric_key'

   def check_compatibility(self, features_dict:types.TensorTypeMaybeDict,
                           predictions_dict: types.TensorTypeMaybeDict,
                           labels_dict: types.TensorTypeMaybeDict) -> None:
       # Add compatibility check needed for the metric here.

   def get_metric_ops(self, features_dict: types.TensorTypeMaybeDict,
                      predictions_dict: types.TensorTypeMaybeDict,
                      labels_dict: types.TensorTypeMaybeDict
                     ) -> Dict[bytes, Tuple[types.TensorType,
                     types.TensorType]]:
        # Metric computation logic here.
        # Define value and update ops.
        value_op = compute_metric_value(...)
        update_op = create_update_op(... )
        return {self._metric_key: (value_op, update_op)}

   def populate_stats_and_pop(
       self, slice_key: slicer.SliceKeyType, combined_metrics: Dict[Text, Any],
       output_metrics: Dict[Text, metrics_pb2.MetricValue]) -> None:
       # Parses the metric and converts it into required metric format.
       metric_result = combined_metrics[self._metric_key]
       output_metrics[self._metric_key].double_value.value = metric_result

استفاده

# Custom metric callback
custom_metric_callback = my_metric(
    labels_key='label',
    target_prediction_keys=['prediction'])

fairness_indicators_callback =
   post_export_metrics.fairness_indicators(
        thresholds=[0.1, 0.3, 0.5, 0.7, 0.9], labels_key=label)

add_metrics_callbacks = [custom_metric_callback,
   fairness_indicators_callback]

eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path=eval_saved_model_path,
    add_metrics_callbacks=add_metrics_callbacks)

eval_config = tfma.EvalConfig(...)

# Run evaluation
tfma.run_model_analysis(
    eval_config=eval_config, eval_shared_model=eval_shared_model)