מדדי פוסט ייצוא

כפי שהשם מרמז, זהו מדד שמתווסף לאחר הייצוא, לפני הערכה.

TFMA ארוז עם מספר מדדי הערכה מוגדרים מראש, כמו example_count, auc, confusion_matrix_at_thresholds, precision_recall_at_k, mse, mae, אם להזכיר כמה. (הרשימה המלאה כאן .)

אם אינך מוצא מדד קיים הרלוונטי למקרה השימוש שלך, או רוצה להתאים אישית מדד, אתה יכול להגדיר מדד מותאם אישית משלך. המשך לקרוא לפרטים!

הוספת מדדים מותאמים אישית ב-TFMA

הגדרת מדדים מותאמים אישית ב-TFMA 1.x

הרחבת שיעור בסיס מופשט

כדי להוסיף מדד מותאם אישית, צור מחלקה חדשה המרחיבה את מחלקה המופשטת של _PostExportMetric והגדר את הבנאי שלה ויישם שיטות מופשטות/לא מיושמות.

הגדר קונסטרוקטור

בקונסטרוקטור, קח כפרמטרים את כל המידע הרלוונטי כמו label_key, prediction_key, example_weight_key, metric_tag וכו' הנדרש עבור מדד מותאם אישית.

יישם שיטות מופשטות / לא מיושמות
  • check_compatibility

    יישם שיטה זו כדי לבדוק תאימות של המדד עם המודל המוערך, כלומר בדיקה אם כל התכונות הנדרשות, התווית הצפויה ומפתח החיזוי קיימים במודל בסוג הנתונים המתאים. צריך שלושה טיעונים:

    • features_dict
    • predictions_dict
    • labels_dict

    מילונים אלה מכילים הפניות לטנזורים עבור המודל.

  • get_metric_ops

    יישם שיטה זו כדי לספק פעולות מדדיות (אופס ערך ועדכון) לחישוב המדד. בדומה לשיטת check_compatibility, היא גם דורשת שלושה ארגומנטים:

    • features_dict
    • predictions_dict
    • labels_dict

    הגדר את הלוגיקה החישובית המטרית שלך באמצעות הפניות אלה לטנסורים עבור המודל.

  • אכלוס_סטטיסטיקות_ו_פופ ואכלוס_עלילות_ו_פופ

    יישם מדד זה כדי להמיר תוצאות גולמיות של מדדים לפורמט פרוטו 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)