Dışa Aktarma Sonrası Metrikler

Adından da anlaşılacağı gibi bu, değerlendirmeden önce dışa aktarma sonrasında eklenen bir metriktir.

TFMA, birkaçını saymak gerekirse example_count, auc, Confused_matrix_at_thresholds, Precision_recall_at_k, mse, mae gibi önceden tanımlanmış çeşitli değerlendirme ölçümleriyle paketlenmiştir. (Tam liste burada .)

Kullanım durumunuzla alakalı mevcut bir metrik bulamazsanız veya bir metriği özelleştirmek istiyorsanız kendi özel metriğinizi tanımlayabilirsiniz. Ayrıntılar için okumaya devam edin!

TFMA'ya Özel Metrikler Ekleme

TFMA 1.x'te Özel Metrikleri Tanımlama

Soyut Temel Sınıfı Genişlet

Özel bir metrik eklemek için, _PostExportMetric soyut sınıfını genişleten yeni bir sınıf oluşturun ve bunun yapıcısını tanımlayın ve soyut/uygulanmamış yöntemleri uygulayın.

Yapıcıyı Tanımla

Yapıcıda, özel metrik için gereken etiket_anahtarı, tahmin_anahtarı, örnek_ağırlık_anahtarı, metrik_etiket vb. gibi tüm ilgili bilgileri parametre olarak alın.

Soyut / Uygulanmamış Yöntemlerin Uygulanması
  • check_uyumluluk

    Metriğin değerlendirilen modelle uyumluluğunu kontrol etmek için bu yöntemi uygulayın; yani tüm gerekli özelliklerin, beklenen etiketin ve tahmin anahtarının uygun veri türünde modelde mevcut olup olmadığını kontrol edin. Üç argüman alır:

    • feature_dict
    • tahminler_dict
    • labels_dict

    Bu sözlükler model için Tensörlere referanslar içerir.

  • get_metric_ops

    Metriği hesaplamak için metrik işlemler (değer ve güncelleme işlemleri) sağlamak üzere bu yöntemi uygulayın. check_compatibility yöntemine benzer şekilde, aynı zamanda üç argüman alır:

    • feature_dict
    • tahminler_dict
    • labels_dict

    Model için Tensörlere yönelik bu referansları kullanarak metrik hesaplama mantığınızı tanımlayın.

  • populate_stats_and_pop ve populate_plots_and_pop

    Ham metrik sonuçlarını MetricValue ve PlotData protokol formatına dönüştürmek için bu metriği uygulayın. Bunun için üç argüman gerekir:

    • dilim_anahtarı: Ait olduğu dilim metriğinin adı.
    • birleştirilmiş_metrikler: Ham sonuçları içeren sözlük.
    • çıktı_metrikleri: İstenilen protokol biçiminde metriği içeren çıktı sözlüğü.
@_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

Kullanım

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