Tensorflow 모델 분석 측정항목 및 플롯

개요

TFMA는 다음 측정항목 및 플롯을 지원합니다.

  • 표준 케라스 지표( tf.keras.metrics.* )
    • keras 지표를 사용하기 위해 keras 모델이 필요하지 않습니다. 메트릭은 메트릭 클래스를 직접 사용하여 빔의 그래프 외부에서 계산됩니다.
  • 표준 TFMA 지표 및 도표( tfma.metrics.* )

  • 커스텀 케라스 측정항목( tf.keras.metrics.Metric 에서 파생된 측정항목)

  • 사용자 정의 빔 컴바이너를 사용하는 사용자 정의 TFMA 지표( tfma.metrics.Metric 에서 파생된 지표 또는 다른 지표에서 파생된 지표).

TFMA는 또한 다중 클래스/다중 레이블 문제에 사용하기 위해 이진 분류 메트릭을 변환하기 위한 기본 제공 지원을 제공합니다.

  • 클래스 ID, 상위 K 등을 기준으로 이진화
  • 마이크로 평균화, 매크로 평균화 등을 기반으로 집계된 메트릭

TFMA는 또한 예제가 파이프라인에서 자동으로 쿼리 키로 그룹화되는 쿼리/순위 기반 메트릭에 대한 기본 제공 지원을 제공합니다.

회귀, 이진 분류, 다중 클래스/다중 레이블 분류, 순위 지정 등을 포함한 다양한 문제에 사용할 수 있는 50개 이상의 표준 메트릭과 플롯이 결합되어 있습니다.

구성

TFMA에서 메트릭을 구성하는 두 가지 방법이 있습니다. (1) tfma.MetricsSpec 을 사용하거나 (2) Python에서 tf.keras.metrics.* 및/또는 tfma.metrics.* 클래스의 인스턴스를 생성하고 tfma.metrics.specs_from_metricstfma.MetricsSpec 목록으로 변환합니다.

다음 섹션에서는 다양한 유형의 기계 학습 문제에 대한 예시 구성을 설명합니다.

회귀 지표

다음은 회귀 문제에 대한 구성 설정의 예입니다. 지원 가능한 추가 지표는 tf.keras.metrics.*tfma.metrics.* 모듈을 참조하십시오.

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "MeanSquaredError" }
    metrics { class_name: "Accuracy" }
    metrics { class_name: "MeanLabel" }
    metrics { class_name: "MeanPrediction" }
    metrics { class_name: "Calibration" }
    metrics {
      class_name: "CalibrationPlot"
      config: '"min_value": 0, "max_value": 10'
    }
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    tfma.metrics.ExampleCount(name='example_count'),
    tf.keras.metrics.MeanSquaredError(name='mse'),
    tf.keras.metrics.Accuracy(name='accuracy'),
    tfma.metrics.MeanLabel(name='mean_label'),
    tfma.metrics.MeanPrediction(name='mean_prediction'),
    tfma.metrics.Calibration(name='calibration'),
    tfma.metrics.CalibrationPlot(
        name='calibration', min_value=0, max_value=10)
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

이 설정은 tfma.metrics.default_regression_specs 를 호출하여 사용할 수도 있습니다.

이진 분류 지표

다음은 이진 분류 문제에 대한 구성 설정의 예입니다. 지원 가능한 추가 지표는 tf.keras.metrics.*tfma.metrics.* 모듈을 참조하십시오.

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "BinaryCrossentropy" }
    metrics { class_name: "BinaryAccuracy" }
    metrics { class_name: "AUC" }
    metrics { class_name: "AUCPrecisionRecall" }
    metrics { class_name: "MeanLabel" }
    metrics { class_name: "MeanPrediction" }
    metrics { class_name: "Calibration" }
    metrics { class_name: "ConfusionMatrixPlot" }
    metrics { class_name: "CalibrationPlot" }
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    tfma.metrics.ExampleCount(name='example_count'),
    tf.keras.metrics.BinaryCrossentropy(name='binary_crossentropy'),
    tf.keras.metrics.BinaryAccuracy(name='accuracy'),
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    tf.keras.metrics.AUC(
        name='auc_precision_recall', curve='PR', num_thresholds=10000),
    tf.keras.metrics.Precision(name='precision'),
    tf.keras.metrics.Recall(name='recall'),
    tfma.metrics.MeanLabel(name='mean_label'),
    tfma.metrics.MeanPrediction(name='mean_prediction'),
    tfma.metrics.Calibration(name='calibration'),
    tfma.metrics.ConfusionMatrixPlot(name='confusion_matrix_plot'),
    tfma.metrics.CalibrationPlot(name='calibration_plot')
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

이 설정은 tfma.metrics.default_binary_classification_specs 를 호출하여 사용할 수도 있습니다.

다중 클래스/다중 레이블 분류 지표

다음은 다중 클래스 분류 문제에 대한 구성 설정의 예입니다. 지원 가능한 추가 지표는 tf.keras.metrics.*tfma.metrics.* 모듈을 참조하십시오.

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "ExampleCount" }
    metrics { class_name: "SparseCategoricalCrossentropy" }
    metrics { class_name: "SparseCategoricalAccuracy" }
    metrics { class_name: "Precision" config: '"top_k": 1' }
    metrics { class_name: "Precision" config: '"top_k": 3' }
    metrics { class_name: "Recall" config: '"top_k": 1' }
    metrics { class_name: "Recall" config: '"top_k": 3' }
    metrics { class_name: "MultiClassConfusionMatrixPlot" }
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    tfma.metrics.ExampleCount(name='example_count'),
    tf.keras.metrics.SparseCategoricalCrossentropy(
        name='sparse_categorical_crossentropy'),
    tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy'),
    tf.keras.metrics.Precision(name='precision', top_k=1),
    tf.keras.metrics.Precision(name='precision', top_k=3),
    tf.keras.metrics.Recall(name='recall', top_k=1),
    tf.keras.metrics.Recall(name='recall', top_k=3),
    tfma.metrics.MultiClassConfusionMatrixPlot(
        name='multi_class_confusion_matrix_plot'),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

이 설정은 tfma.metrics.default_multi_class_classification_specs 를 호출하여 사용할 수도 있습니다.

다중 클래스/다중 레이블 이진화 메트릭

다중 클래스/다중 레이블 메트릭은 tfma.BinarizationOptions 를 사용하여 클래스별, tfma.BinarizationOptions 별 등의 메트릭을 생성하도록 이진화할 수 있습니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    binarize: { class_ids: { values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } }
    // Metrics to binarize
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    // Metrics to binarize
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, binarize=tfma.BinarizationOptions(
        class_ids={'values': [0,1,2,3,4,5,6,7,8,9]}))

다중 클래스/다중 라벨 집계 측정항목

tfma.AggregationOptions 를 사용하여 다중 클래스/다중 레이블 지표를 집계하여 이진 분류 지표에 대한 단일 집계 값을 생성할 수 있습니다.

집계 설정은 이진화 설정과 독립적이므로 tfma.AggregationOptionstfma.BinarizationOptions 를 동시에 사용할 수 있습니다.

마이크로 평균

마이크로 평균화는 tfma.AggregationOptions 내에서 micro_average 옵션을 사용하여 수행할 수 있습니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    aggregate: { micro_average: true }
    // Metrics to aggregate
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    // Metrics to aggregate
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, aggregate=tfma.AggregationOptions(micro_average=True))

마이크로 평균화는 계산에 상위 k 값만 사용되는 top_k 설정도 지원합니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    aggregate: {
      micro_average: true
      top_k_list: { values: [1, 3] }
    }
    // Metrics to aggregate
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    // Metrics to aggregate
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics,
    aggregate=tfma.AggregationOptions(micro_average=True,
                                      top_k_list={'values': [1, 3]}))

매크로 / 가중 매크로 평균

매크로 평균화는 tfma.AggregationOptions 내에서 macro_average 또는 weighted_macro_average 옵션을 사용하여 수행할 수 있습니다. top_k 설정이 사용되지 않는 한 매크로는 평균을 계산할 클래스를 알기 위해 class_weights 를 설정해야 합니다. class_weight 가 제공되지 않으면 0.0이 가정됩니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    aggregate: {
      macro_average: true
      class_weights: { key: 0 value: 1.0 }
      class_weights: { key: 1 value: 1.0 }
      class_weights: { key: 2 value: 1.0 }
      class_weights: { key: 3 value: 1.0 }
      class_weights: { key: 4 value: 1.0 }
      class_weights: { key: 5 value: 1.0 }
      class_weights: { key: 6 value: 1.0 }
      class_weights: { key: 7 value: 1.0 }
      class_weights: { key: 8 value: 1.0 }
      class_weights: { key: 9 value: 1.0 }
    }
    // Metrics to aggregate
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    // Metrics to aggregate
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics,
    aggregate=tfma.AggregationOptions(
        macro_average=True, class_weights={i: 1.0 for i in range(10)}))

마이크로 평균화와 마찬가지로 매크로 평균화도 상위 k 값만 계산에 사용되는 top_k 설정을 지원합니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    aggregate: {
      macro_average: true
      top_k_list: { values: [1, 3] }
    }
    // Metrics to aggregate
    metrics { class_name: "AUC" }
    ...
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    // Metrics to aggregate
    tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics,
    aggregate=tfma.AggregationOptions(macro_average=True,
                                      top_k_list={'values': [1, 3]}))

쿼리/순위 기반 메트릭

쿼리/순위 기반 메트릭은 메트릭 사양에서 query_key 옵션을 지정하여 활성화됩니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    query_key: "doc_id"
    metrics {
      class_name: "NDCG"
      config: '"gain_key": "gain", "top_k_list": [1, 2]'
    }
    metrics { class_name: "MinLabelPosition" }
  }
""", tfma.EvalConfig()).metrics_specs

다음 Python 코드를 사용하여 이와 동일한 설정을 만들 수 있습니다.

metrics = [
    tfma.metrics.NDCG(name='ndcg', gain_key='gain', top_k_list=[1, 2]),
    tfma.metrics.MinLabelPosition(name='min_label_position')
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics, query_key='doc_id')

다중 모델 평가 지표

TFMA는 동시에 여러 모델 평가를 지원합니다. 다중 모델 평가가 수행되면 각 모델에 대한 지표가 계산됩니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    # no model_names means all models
    ...
  }
""", tfma.EvalConfig()).metrics_specs

모델의 하위 집합에 대해 메트릭을 계산해야 하는 경우 metric_specs 에서 model_names 를 설정합니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    model_names: ["my-model1"]
    ...
  }
""", tfma.EvalConfig()).metrics_specs

specs_from_metrics API는 모델 이름 전달도 지원합니다.

metrics = [
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, model_names=['my-model1'])

모델 비교 지표

TFMA는 기준 모델에 대한 후보 모델의 비교 지표 평가를 지원합니다. 후보 및 기준 모델 쌍을 설정하는 간단한 방법은 적절한 모델 이름(tfma.BASELINE_KEY 및 tfma.CANDIDATE_KEY)과 함께 eval_shared_model을 전달하는 것입니다.


eval_config = text_format.Parse("""
  model_specs {
    # ... model_spec without names ...
  }
  metrics_spec {
    # ... metrics ...
  }
""", tfma.EvalConfig())

eval_shared_models = [
  tfma.default_eval_shared_model(
      model_name=tfma.CANDIDATE_KEY,
      eval_saved_model_path='/path/to/saved/candidate/model',
      eval_config=eval_config),
  tfma.default_eval_shared_model(
      model_name=tfma.BASELINE_KEY,
      eval_saved_model_path='/path/to/saved/baseline/model',
      eval_config=eval_config),
]

eval_result = tfma.run_model_analysis(
    eval_shared_models,
    eval_config=eval_config,
    # This assumes your data is a TFRecords file containing records in the
    # tf.train.Example format.
    data_location="/path/to/file/containing/tfrecords",
    output_path="/path/for/output")

비교 메트릭은 비교 가능한 모든 메트릭(현재 정확도 및 AUC와 같은 스칼라 값 메트릭만)에 대해 자동으로 계산됩니다.

다중 출력 모델 지표

TFMA는 출력이 다른 모델에서 지표 평가를 지원합니다. 다중 출력 모델은 출력 이름으로 키가 지정된 사전 형식으로 출력 예측을 저장합니다. 다중 출력 모델을 사용하는 경우 메트릭 집합과 연결된 출력 이름을 MetricsSpec의 output_names 섹션에 지정해야 합니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    output_names: ["my-output"]
    ...
  }
""", tfma.EvalConfig()).metrics_specs

specs_from_metrics API는 출력 이름 전달도 지원합니다.

metrics = [
    ...
]
metrics_specs = tfma.metrics.specs_from_metrics(
    metrics, output_names=['my-output'])

메트릭 설정 사용자 지정

TFMA를 사용하면 다른 메트릭과 함께 사용되는 설정을 사용자 정의할 수 있습니다. 예를 들어 이름을 변경하고 임계값을 설정하는 등의 작업을 수행할 수 있습니다. 이는 메트릭 구성에 config 섹션을 추가하여 수행됩니다. 구성은 메트릭 __init__ 메서드에 전달될 매개변수의 JSON 문자열 버전을 사용하여 지정됩니다(사용 편의성을 위해 선행 및 후행 '{' 및 '}' 대괄호를 생략할 수 있음). 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics {
      class_name: "ConfusionMatrixAtThresholds"
      config: '"thresholds": [0.3, 0.5, 0.8]'
    }
  }
""", tfma.MetricsSpec()).metrics_specs

이 사용자 지정은 물론 직접 지원됩니다.

metrics = [
   tfma.metrics.ConfusionMatrixAtThresholds(thresholds=[0.3, 0.5, 0.8]),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)

출력

메트릭 평가의 출력은 사용된 구성에 따라 일련의 메트릭 키/값 및/또는 플롯 키/값입니다.

메트릭 키

MetricKeys 는 구조화된 키 유형을 사용하여 정의됩니다. 이 키는 메트릭의 다음 각 측면을 고유하게 식별합니다.

  • 메트릭 이름( auc , mean_label 등)
  • 모델 이름(다중 모델 평가인 경우에만 사용)
  • 출력 이름(다중 출력 모델이 평가되는 경우에만 사용됨)
  • 하위 키(예: 다중 클래스 모델이 이진화된 경우 클래스 ID)

메트릭 값

MetricValues 는 다양한 메트릭(예: double , ConfusionMatrixAtThresholds 등)에서 지원하는 다양한 값 유형을 캡슐화하는 proto를 사용하여 정의됩니다.

다음은 지원되는 메트릭 값 유형입니다.

  • double_value - double 유형의 래퍼입니다.
  • bytes_value - 바이트 값입니다.
  • bounded_value - 점별 추정값이 될 수 있는 실제 값을 나타내며, 선택적으로 일종의 대략적인 범위를 포함합니다. value , lower_boundupper_bound 속성이 있습니다.
  • value_at_cutoffs - 컷오프 값(예: precision@K, recall@K). 속성 values ​​가 있으며 각각 속성 cutoffvalue 가 있습니다.
  • confusion_matrix_at_thresholds - 임계값에서의 혼동 행렬. 특성 matrices 이 있으며 각 행렬에는 threshold , precision , recallfalse_negatives 와 같은 혼동 행렬 값에 대한 특성이 있습니다.
  • array_value - 값의 배열을 반환하는 메트릭의 경우.

플롯 키

PlotKeys 는 역사적 이유로 모든 플롯 값이 단일 proto에 저장되어 플롯 키에 이름이 없다는 점을 제외하면 메트릭 키와 유사합니다.

플롯 값

지원되는 모든 플롯은 PlotData 라는 단일 proto에 저장됩니다.

평가 결과

평가 실행의 반환값은 tfma.EvalResult 입니다. 이 레코드에는 레벨이 각각 출력 이름, 클래스 ID, 메트릭 이름 및 메트릭 값에 해당하는 다단계 사전으로 메트릭 키를 인코딩하는 slicing_metrics 가 포함되어 있습니다. 이것은 Jupiter 노트북의 UI 표시에 사용하기 위한 것입니다. 기본 데이터에 대한 액세스가 필요한 경우 metrics 결과 파일을 대신 사용해야 합니다( metrics_for_slice.proto 참조).

커스터마이징

저장된 keras(또는 레거시 EvalSavedModel)의 일부로 추가된 사용자 지정 메트릭 외에도. TFMA 사후 저장에서 메트릭을 사용자 정의하는 두 가지 방법이 있습니다. (1) 사용자 정의 keras 메트릭 클래스를 정의하고 (2) 빔 결합기가 지원하는 사용자 정의 TFMA 메트릭 클래스를 정의합니다.

두 경우 모두 메트릭 클래스 및 관련 모듈의 이름을 지정하여 메트릭을 구성합니다. 예를 들어:

from google.protobuf import text_format

metrics_specs = text_format.Parse("""
  metrics_specs {
    metrics { class_name: "MyMetric" module: "my.module"}
  }
""", tfma.EvalConfig()).metrics_specs

커스텀 케라스 지표

사용자 정의 케라스 메트릭을 생성하려면 사용자는 구현으로 tf.keras.metrics.Metric 을 확장한 다음 평가 시 메트릭의 모듈을 사용할 수 있는지 확인해야 합니다.

모델 저장 후 추가된 메트릭의 경우 TFMA는 레이블(예: y_true), 예측(y_pred) 및 예제 가중치(sample_weight)를 update_state 메서드에 대한 매개변수로 사용하는 메트릭만 지원합니다.

Keras 메트릭 예제

다음은 사용자 지정 케라스 메트릭의 예입니다.

class MyMetric(tf.keras.metrics.Mean):

  def __init__(self, name='my_metric', dtype=None):
    super(MyMetric, self).__init__(name=name, dtype=dtype)

  def update_state(self, y_true, y_pred, sample_weight=None):
    return super(MyMetric, self).update_state(
        y_pred, sample_weight=sample_weight)

맞춤형 TFMA 지표

사용자 정의 TFMA 메트릭을 생성하려면 사용자는 구현으로 tfma.metrics.Metric 을 확장한 다음 평가 시 메트릭의 모듈을 사용할 수 있는지 확인해야 합니다.

미터법

tfma.metrics.Metric 구현은 메트릭 값을 계산하는 데 필요한 계산(다중 가능)을 생성하기 위한 함수와 함께 메트릭 구성을 정의하는 kwargs 세트로 구성됩니다. 아래 섹션에서 설명하는 tfma.metrics.MetricComputationtfma.metrics.DerivedMetricComputation 의 두 가지 기본 계산 유형을 사용할 수 있습니다. 이러한 계산을 생성하는 함수는 다음 매개 변수를 입력으로 전달합니다.

  • eval_config: tfam.EvalConfig
    • 평가자에게 전달된 평가 구성(사용할 예측 키 등의 모델 사양 설정을 찾는 데 유용함).
  • model_names: List[Text]
    • 메트릭을 계산할 모델 이름 목록(단일 모델인 경우 없음)
  • output_names: List[Text] .
    • 메트릭을 계산할 출력 이름 목록(단일 모델인 경우 없음)
  • sub_keys: List[tfma.SubKey] .
    • 메트릭을 계산할 하위 키(클래스 ID, 상위 K 등) 목록(또는 없음)
  • aggregation_type: tfma.AggregationType
    • 집계 메트릭을 계산하는 경우 집계 유형입니다.
  • class_weights: Dict[int, float] .
    • 집계 메트릭을 계산하는 경우 사용할 클래스 가중치입니다.
  • query_key: Text
    • 쿼리/순위 기반 메트릭을 계산하는 경우 사용되는 쿼리 키입니다.

메트릭이 이러한 설정 중 하나 이상과 연결되지 않은 경우 서명 정의에서 해당 매개 변수를 제외할 수 있습니다.

메트릭이 각 모델, 출력 및 하위 키에 대해 동일한 방식으로 계산되는 경우 유틸리티 tfma.metrics.merge_per_key_computations 를 사용하여 이러한 각 입력에 대해 동일한 계산을 개별적으로 수행할 수 있습니다.

메트릭 계산

MetricComputationpreprocessors combiner 의 조합으로 구성됩니다. preprocessors 추출을 입력으로 사용하고 결합기가 사용할 초기 상태를 출력하는 beam.DoFnpreprocessor 목록입니다(추출에 대한 자세한 내용은 아키텍처 참조). 모든 전처리기는 목록 순서대로 순차적으로 실행됩니다. preprocessors 비어 있으면 결합기에 StandardMetricInputs 가 전달됩니다(표준 메트릭 입력에는 레이블, 예측 및 example_weights가 포함됨). combiner 는 (slice key, preprocessor output)의 튜플을 입력으로 취하고 ( beam.CombineFn , metric results dict)의 튜플을 결과로 출력하는 beam.CombineFn입니다.

슬라이싱은 preprocessors combiner 사이에서 발생합니다.

메트릭 계산에서 표준 메트릭 입력을 모두 사용하려고 하지만 features 추출의 몇 가지 기능으로 확장하려는 경우 여러 결합기에서 요청된 기능을 단일 기능으로 병합하는 특수 FeaturePreprocessor 를 사용할 수 있습니다. 모든 결합기로 전달되는 공유 StandardMetricsInputs 값(결합자는 관심 있는 기능을 읽고 나머지는 무시함).

다음은 ExampleCount를 계산하기 위한 TFMA 메트릭 정의의 매우 간단한 예입니다.

class ExampleCount(tfma.metrics.Metric):

  def __init__(self, name: Text = 'example_count'):
    super(ExampleCount, self).__init__(_example_count, name=name)


def _example_count(
    name: Text = 'example_count') -> tfma.metrics.MetricComputations:
  key = tfma.metrics.MetricKey(name=name)
  return [
      tfma.metrics.MetricComputation(
          keys=[key],
          preprocessors=[_ExampleCountPreprocessor()],
          combiner=_ExampleCountCombiner(key))
  ]


class _ExampleCountPreprocessor(beam.DoFn):

  def process(self, extracts: tfma.Extracts) -> Iterable[int]:
    yield 1


class _ExampleCountCombiner(beam.CombineFn):

  def __init__(self, metric_key: tfma.metrics.MetricKey):
    self._metric_key = metric_key

  def create_accumulator(self) -> int:
    return 0

  def add_input(self, accumulator: int, state: int) -> int:
    return accumulator + state

  def merge_accumulators(self, accumulators: Iterable[int]) -> int:
    accumulators = iter(accumulators)
    result = next(accumulator)
    for accumulator in accumulators:
      result += accumulator
    return result

  def extract_output(self,
                     accumulator: int) -> Dict[tfma.metrics.MetricKey, int]:
    return {self._metric_key: accumulator}

파생 메트릭 계산

DerivedMetricComputation 은 다른 메트릭 계산의 출력을 기반으로 메트릭 값을 계산하는 데 사용되는 결과 함수로 구성됩니다. 결과 함수는 계산된 값의 사전을 입력으로 사용하고 추가 메트릭 결과의 사전을 출력합니다.

지표에 의해 생성된 계산 목록에 파생된 계산이 의존하는 계산을 포함하는 것은 허용(권장)된다는 점에 유의하십시오. 이렇게 하면 여러 메트릭 간에 공유되는 계산을 미리 만들고 전달하지 않아도 됩니다. 평가자는 정의가 동일한 계산을 자동으로 중복 제거하므로 하나의 계산만 실제로 실행됩니다.

TJUR 메트릭 은 파생 메트릭의 좋은 예를 제공합니다.