내보내기 후 측정항목

이름에서 알 수 있듯이 이는 내보내기 후 평가 전에 추가되는 측정항목입니다.

TFMA는 example_count, auc, Confusion_matrix_at_thresholds, Precision_recall_at_k, mse, mae 등 사전 정의된 여러 평가 측정항목과 함께 패키징됩니다. (전체 목록은 여기에 있습니다 .)

사용 사례와 관련된 기존 측정항목을 찾을 수 없거나 측정항목을 맞춤설정하려는 경우 고유한 맞춤 측정항목을 정의할 수 있습니다. 자세한 내용을 읽어보세요!

TFMA에 사용자 정의 지표 추가

TFMA 1.x에서 사용자 정의 지표 정의

추상 기본 클래스 확장

사용자 정의 메트릭을 추가하려면 _PostExportMetric 추상 클래스를 확장하는 새 클래스를 생성하고 해당 생성자를 정의하고 추상/구현되지 않은 메서드를 구현합니다.

생성자 정의

생성자에서 맞춤 측정항목에 필요한 label_key, 예측_키, example_weight_key, metric_tag 등과 같은 모든 관련 정보를 매개변수로 사용합니다.

추상/구현되지 않은 메서드 구현
  • check_compatibility

    평가 중인 모델과 메트릭의 호환성을 확인하려면 이 방법을 구현하십시오. 즉, 필요한 모든 기능, 예상 레이블 및 예측 키가 모델에 적절한 데이터 유형으로 존재하는지 확인하십시오. 세 가지 인수가 필요합니다.

    • 기능_딕셔너리
    • 예측_dict
    • labels_dict

    이 사전에는 모델의 Tensor에 대한 참조가 포함되어 있습니다.

  • get_metric_ops

    메트릭을 계산하기 위한 메트릭 작업(값 및 업데이트 작업)을 제공하려면 이 메서드를 구현합니다. check_compatibility 메소드와 유사하게 세 가지 인수도 사용합니다.

    • 기능_딕셔너리
    • 예측_dict
    • labels_dict

    모델의 Tensor에 대한 이러한 참조를 사용하여 측정항목 계산 논리를 정의하세요.

  • populate_stats_and_poppopulate_plots_and_pop

    원시 측정항목 결과를 MetricValuePlotData proto 형식으로 변환하려면 이 측정항목을 구현하세요. 여기에는 세 가지 인수가 필요합니다.

    • Slice_key: 슬라이스 메트릭이 속한 이름입니다.
    • Combined_metrics: 원시 결과를 포함하는 사전입니다.
    • output_metrics: 원하는 proto 형식의 측정항목이 포함된 출력 사전입니다.
@_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)