SIG TFX-Addons 커뮤니티에 가입하고 TFX를 더욱 향상시키는 데 도움을 주세요! SIG TFX 애드온 가입

Tensorflow 모델 분석 측정항목 및 도표

개요

TFMA는 다음 메트릭 및 플롯을 지원합니다.

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

  • 사용자 정의 keras 측정 (에서 파생 메트릭 tf.keras.metrics.Metric )

  • 사용자 TFMA 메트릭 (통계로부터 유도 tfma.metrics.Metric 맞춤 빔 결합기 또는 다른 통계로부터 유도 된 측정)을 사용하여).

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

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

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

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

구성

TFMA의 구성 지표 두 가지 방법이 있습니다 : (1) 사용 tfma.MetricsSpec 의 인스턴스 만들거나 (2) tf.keras.metrics.* 및 / 또는 tfma.metrics.* 파이썬과 사용의 클래스 tfma.metrics.specs_from_metrics 목록으로 변환하는 tfma.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: "WeightedExampleCount" }
    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'),
    tfma.metrics.WeightedExampleCount(name='weighted_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: "WeightedExampleCount" }
    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'),
    tfma.metrics.WeightedExampleCount(name='weighted_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: "WeightedExampleCount" }
    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'),
    tfma.metrics.WeightedExampleCount(name='weighted_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 .

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

멀티 클래스 / 멀티 라벨 메트릭은 사용 등 top_k 당, 클래스 당 통계를 생산하기 위해 진화 할 수 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 동시에.

마이크로 평균

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

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

마이크로 평균화도 설정을 지원 top_k 만 가기 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]}))

매크로/가중 매크로 평균

매크로 평균은 사용하여 수행 할 수 있습니다 macro_average 또는 weighted_macro_average 내 옵션을 tfma.AggregationOptions . 하지 않는 한 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)}))

마이크로 평균화 마찬가지로 매크로 평균화도 설정을 지원 top_k 만 가기 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

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

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

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

다중 출력 모델 메트릭

TFMA는 출력이 다른 모델에 대한 메트릭 평가를 지원합니다. 다중 출력 모델은 출력 이름으로 키가 지정된 사전 형식으로 출력 예측을 저장합니다. 다중 - 출력 모델의 사용하는 경우, 매트릭스의 세트와 연관된 출력은 이름으로 지정해야 output_names MetricsSpec 제. 예를 들어:

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 메트릭 설정에 절을 참조하십시오. 는 config이 메트릭에 전달 될 수있는 매개 변수의 JSON 문자열 버전 사용하여 지정 __init__ 방법 (사용 편의성의 선행 및 후행 "{"와 "}"괄호는 생략 될 수있다). 예를 들어:

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

다음은 지원되는 측정항목 값 유형입니다.

  • double_value - 래퍼에 대한 이중 유형입니다.
  • bytes_value - A는 값을 바이트.
  • bounded_value - 선택적으로 어떤 종류의 대략적인 경계와 더불어, 점별 추정 될 수있는 실제 값을 나타냅니다. 속성 가지고 value , lower_boundupper_bound .
  • value_at_cutoffs - 컷오프에서 값 (K @ 예를 들어, 정밀, K @ 리콜). 속성 있음 values 속성 갖고, 각각의 cutoffvalue .
  • confusion_matrix_at_thresholds - 임계 값에서 혼란 행렬. 속성 있음 matrices 속성 갖고, 각각의 threshold , precision , recall 등과 혼동 매트릭스 값 false_negatives .
  • array_value - 값의 배열을 반환 측정 항목.

플롯 키

PlotKeys는 플롯 키가 이름을 가지고 있지 않은, 그래서 역사적인 이유에 대한 모든 플롯 값은 하나의 프로토에 저장되어있는 것을 제외하고 메트릭 키와 유사하다.

플롯 값

모든 지원되는 플롯이라는 단일 프로토에 저장됩니다 PlotData .

평가 결과

평가 실행의 반환은입니다 tfma.EvalResult . 이 레코드 포함 slicing_metrics 레벨을 각각 출력 이름, 클래스 ID 메트릭 이름 및 메트릭 값에 대응하는 다중 레벨 딕셔너리로 측정 키를 인코딩한다. 이것은 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

커스텀 케라스 메트릭

사용자 지정 메트릭 keras 만들려면 사용자는 확장 할 필요가 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 구현은 측정 값 calcuate 데 필요한 계산 (가능한 다수의)를 생성하는 기능과 함께 매트릭스 구성을 정의 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 별도로 각각의 입력에 대해 동일한 계산을 수행하는데 사용될 수있다.

메트릭계산

MetricComputation (A)의 조합으로 구성되어 preprocessorcombiner . preprocessor A는 beam.DoFn 입력으로 추출물을 취하고 (참조 합성기로 사용되는 초기 상태 출력 구조를 추출 어떤 추가 정보를 위해). 경우 preprocessor 정의되어 있지 않은 경우, 결합기가 전달됩니다 StandardMetricInputs을 (표준 메트릭 입력 레이블, 예측 및 example_weights을 포함). combiner A는 beam.CombineFn 입력으로의 튜플 (슬라이스 키 처리기의 출력)을 얻어 그 결과 (slice_key, 측정 결과 딕셔너리)의 튜플을 출력한다.

슬라이스가 사이에 발생합니다 preprocessorcombiner .

참고 메트릭 계산은 모두 표준 측정 입력을 활용하지만의 기능을 몇 가지로를 증대하고자하는 경우 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],
          preprocessor=_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

DerivedMetricComputation 다른 메트릭 계산의 출력에 기초하여 메트릭 값을 계산하는 데 사용된다 따라서 함수로 구성된다. 결과 함수는 계산된 값의 사전을 입력으로 사용하고 추가 메트릭 결과의 사전을 출력합니다.

메트릭에 의해 생성된 계산 목록에 파생 계산이 의존하는 계산을 포함하는 것이 허용(권장)됩니다. 이렇게 하면 여러 메트릭 간에 공유되는 계산을 미리 만들고 전달할 필요가 없습니다. 평가자는 하나의 계산만 실제로 실행되도록 동일한 정의를 가진 계산을 자동으로 중복 제거합니다.

예시

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