Metrik Pasca Ekspor

Seperti namanya, ini adalah metrik yang ditambahkan pasca-ekspor, sebelum evaluasi.

TFMA dikemas dengan beberapa metrik evaluasi yang telah ditentukan sebelumnya, seperti example_count, auc, Confusion_matrix_at_thresholds, Precision_recall_at_k, mse, mae, dan masih banyak lagi. (Daftar lengkap di sini .)

Jika Anda tidak menemukan metrik yang relevan dengan kasus penggunaan Anda, atau ingin menyesuaikan metrik, Anda dapat menentukan metrik khusus Anda sendiri. Baca terus untuk mengetahui detailnya!

Menambahkan Metrik Khusus di TFMA

Mendefinisikan Metrik Kustom di TFMA 1.x

Perluas Kelas Dasar Abstrak

Untuk menambahkan metrik khusus, buat kelas baru yang memperluas kelas abstrak _PostExportMetric dan tentukan konstruktornya serta terapkan metode abstrak/belum diterapkan.

Tentukan Konstruktor

Di konstruktor, ambil sebagai parameter semua informasi relevan seperti label_key, prediksi_key, example_weight_key, metric_tag, dll. yang diperlukan untuk metrik khusus.

Menerapkan Metode Abstrak/Belum Diimplementasikan
  • periksa_kompatibilitas

    Terapkan metode ini untuk memeriksa kompatibilitas metrik dengan model yang sedang dievaluasi, yaitu memeriksa apakah semua fitur yang diperlukan, label yang diharapkan, dan kunci prediksi ada dalam model dalam tipe data yang sesuai. Dibutuhkan tiga argumen:

    • fitur_diktekan
    • prediksi_dict
    • label_dict

    Kamus ini berisi referensi ke Tensor untuk model tersebut.

  • get_metric_ops

    Terapkan metode ini untuk menyediakan operasi metrik (operasi nilai dan pembaruan) untuk menghitung metrik. Mirip dengan metode check_compatibility, ini juga membutuhkan tiga argumen:

    • fitur_diktekan
    • prediksi_dict
    • label_dict

    Tentukan logika komputasi metrik Anda menggunakan referensi Tensor untuk model ini.

  • populate_stats_and_pop dan populate_plots_and_pop

    Terapkan metrik ini untuk mengonversi hasil metrik mentah ke format proto MetricValue dan PlotData . Ini membutuhkan tiga argumen:

    • irisan_kunci: Nama metrik irisan milik.
    • gabungan_metrik: Kamus berisi hasil mentah.
    • output_metrics: Kamus keluaran yang berisi metrik dalam format proto yang diinginkan.
@_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

Penggunaan

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