מדדי פוסט ייצוא
כפי שהשם מרמז, זהו מדד שמתווסף לאחר הייצוא, לפני הערכה.
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 וכו' הנדרש עבור מדד מותאם אישית.
יישם שיטות מופשטות / לא מיושמות
יישם שיטה זו כדי לבדוק תאימות של המדד עם המודל המוערך, כלומר בדיקה אם כל התכונות הנדרשות, התווית הצפויה ומפתח החיזוי קיימים במודל בסוג הנתונים המתאים. צריך שלושה טיעונים:
- features_dict
- predictions_dict
- labels_dict
מילונים אלה מכילים הפניות לטנזורים עבור המודל.
יישם שיטה זו כדי לספק פעולות מדדיות (אופס ערך ועדכון) לחישוב המדד. בדומה לשיטת 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)