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ı
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.
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)