مقاييس ما بعد التصدير

كما يوحي الاسم، هذا مقياس تتم إضافته بعد التصدير، قبل التقييم.

يتم حزم TFMA مع العديد من مقاييس التقييم المحددة مسبقًا، مثل example_count، وauc، وfusion_matrix_at_thresholds، وprecision_recall_at_k، وmse، وmae، على سبيل المثال لا الحصر. (القائمة الكاملة هنا .)

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

إضافة مقاييس مخصصة في TFMA

تحديد المقاييس المخصصة في TFMA 1.x

توسيع الفئة الأساسية المجردة

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

تعريف المنشئ

في المُنشئ، خذ جميع المعلومات ذات الصلة كمعلمات مثل label_key، وpredict_key، وexample_weight_key، وmetric_tag، وما إلى ذلك المطلوبة للمقياس المخصص.

تنفيذ الأساليب المجردة / غير المنفذة
  • check_compatibility

    قم بتنفيذ هذه الطريقة للتحقق من توافق المقياس مع النموذج الذي يتم تقييمه، أي التحقق من وجود جميع الميزات المطلوبة والتسمية المتوقعة ومفتاح التنبؤ في النموذج في نوع البيانات المناسب. ويأخذ ثلاث حجج:

    • Features_dict
    • توقعات_ديكت
    • labels_dict

    تحتوي هذه القواميس على إشارات إلى Tensors للنموذج.

  • get_metric_ops

    قم بتنفيذ هذه الطريقة لتوفير عمليات القياس (عمليات القيمة والتحديث) لحساب المقياس. كما هو الحال مع طريقة check_compatibility، فإنها تأخذ أيضًا ثلاث وسائط:

    • Features_dict
    • توقعات_ديكت
    • labels_dict

    حدد منطق الحساب المتري الخاص بك باستخدام هذه المراجع إلى Tensors للنموذج.

  • populate_stats_and_pop و populate_plots_and_pop

    قم بتنفيذ هذا المقياس لتحويل نتائج القياس الأولية إلى تنسيق MetricValue و PlotData proto. وهذا يأخذ ثلاث حجج:

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