내보내기 후 측정항목
이름에서 알 수 있듯이 이는 내보내기 후 평가 전에 추가되는 측정항목입니다.
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 등과 같은 모든 관련 정보를 매개변수로 사용합니다.
추상/구현되지 않은 메서드 구현
평가 중인 모델과 메트릭의 호환성을 확인하려면 이 방법을 구현하십시오. 즉, 필요한 모든 기능, 예상 레이블 및 예측 키가 모델에 적절한 데이터 유형으로 존재하는지 확인하십시오. 세 가지 인수가 필요합니다.
- 기능_딕셔너리
- 예측_dict
- labels_dict
이 사전에는 모델의 Tensor에 대한 참조가 포함되어 있습니다.
메트릭을 계산하기 위한 메트릭 작업(값 및 업데이트 작업)을 제공하려면 이 메서드를 구현합니다. check_compatibility 메소드와 유사하게 세 가지 인수도 사용합니다.
- 기능_딕셔너리
- 예측_dict
- labels_dict
모델의 Tensor에 대한 이러한 참조를 사용하여 측정항목 계산 논리를 정의하세요.
populate_stats_and_pop 및 populate_plots_and_pop
원시 측정항목 결과를 MetricValue 및 PlotData 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)