午前9時PSTでMLシンポジウム、この10月19日(火曜日)の最初の女性の中にチューン今すぐ登録

Tensorflowモデル分析のメトリクスとプロット

概要

TFMAは、次のメトリックとプロットをサポートしています。

  • 標準kerasメトリクス( tf.keras.metrics.*
    • ケラスメトリックを使用するためにケラスモデルは必要ないことに注意してください。メトリックは、メトリッククラスを直接使用して、グラフの外側でビーム内で計算されます。
  • 標準TFMAメトリックおよびプロット( tfma.metrics.*

  • カスタムkerasメトリクス(から派生メトリックtf.keras.metrics.Metric

  • カスタムTFMA指標(から派生メトリックtfma.metrics.Metricカスタムビームコンバイナまたは他の指標から派生メトリック)を使用して)。

TFMAは、マルチクラス/マルチラベル問題で使用するためにバイナリ分類メトリックを変換するための組み込みサポートも提供します。

  • クラスID、トップKなどに基づく2値化。
  • マイクロ平均、マクロ平均などに基づく集計メトリック。

TFMAは、パイプラインでサンプルがクエリキーによって自動的にグループ化される、クエリ/ランキングベースのメトリックの組み込みサポートも提供します。

組み合わせて、回帰、バイナリ分類、マルチクラス/マルチラベル分類、ランキングなど、さまざまな問題に利用できる50以上の標準メトリックとプロットがあります。

構成

TFMAでのconfigureメトリックに2つの方法があります:(1)使用してtfma.MetricsSpecのインスタンス作成することによって、または(2) tf.keras.metrics.*および/またはtfma.metrics.* Pythonと使用中のクラス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)

この設定も呼び出すことでavaliableであることに注意してください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)

この設定も呼び出すことでavaliableであることに注意してください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)

この設定も呼び出すことでavaliableであることに注意してください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_namesmetric_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")

比較メトリックは、すべての差分可能なメトリックに対して自動的に計算されます(現在、精度やAUCなどのスカラー値メトリックのみ)。

マルチ出力モデルメトリック

TFMAは、出力が異なるモデルのメトリックの評価をサポートしています。マルチ出力モデルは、出力予測を出力名でキー設定されたdictの形式で格納します。多出力モデルのが使用される場合、メトリックのセットに関連付けられた出力の名前はで指定する必要があり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メトリック設定にセクションを。設定は、メトリックに渡されるパラメータの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は、構造化キーのタイプを使用して定義されます。このキーは、メトリックの次の各側面を一意に識別します。

  • メトリック名( aucmean_label 、など)
  • モデル名(マルチモデル評価の場合にのみ使用)
  • 出力名(複数出力モデルが評価される場合にのみ使用されます)
  • サブキー(たとえば、マルチクラスモデルが2値化されている場合はクラスID)

メトリック値

MetricValuesは異なるメトリック(例えばでサポートされているさまざまな値の型カプセル化し、プロト使って定義されdoubleConfusionMatrixAtThresholds 、など)。

サポートされているメトリック値のタイプは次のとおりです。

  • double_value - double型のラッパー。
  • bytes_value - Aバイト値。
  • bounded_value -任意にある種のおおよその境界を持つ、点別推定値とすることができる真の値を表します。プロパティの持つvaluelower_bound 、およびupper_bound
  • value_at_cutoffs -カットオフの値(K、K @リコール@例えば精度)。プロパティの持つvaluesプロパティそれぞれ有する、 cutoffvalue
  • confusion_matrix_at_thresholds -しきい値の混同行列。プロパティ有するmatricesのプロパティそれぞれ有する、 thresholdprecisionrecallなど、と混同行列値false_negatives
  • array_value -値の配列を返すメトリックの場合。

プロットキー

PlotKeysは、プロットのキーは名前がありませんので、歴史的な理由のためにすべてのプロット値を1つのプロトに格納されていることを除き、メトリックキーに似ています。

プロット値

サポートされるすべてのプロットはと呼ばれる単一プロトに格納されているPlotData

EvalResult

評価の実行からの戻りがあるtfma.EvalResult 。このレコードは含まslicing_metricsレベルは、それぞれ、出力名、クラスID、メトリック名、メトリック値に対応する多値辞書としてメトリックキーを符号化します。これは、JupiterノートブックのUI表示に使用することを目的としています。基礎となるデータへのアクセスが必要な場合metrics 、ファイルを結果(参照代わりに使用する必要がありmetrics_for_slice.protoを)。

カスタマイズ

保存されたkeras(またはレガシーEvalSavedModel)の一部として追加されるカスタムメトリックに加えて。 TFMAポストセービングでメトリックをカスタマイズするには、(1)カスタムkerasメトリッククラスを定義する方法と、(2)ビームコンバイナに基づくカスタムTFMAメトリッククラスを定義する方法の2つがあります。

どちらの場合も、メトリックは、メトリッククラスと関連するモジュールの名前を指定することによって構成されます。例えば:

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メトリック

カスタムメトリックkeras作成するには、ユーザーが拡張する必要がありますtf.keras.metrics.Metricその実施して、その後必ず、メトリックのモジュールは、評価時点で利用可能であることを確認してください。

保存後のモデルを追加メトリックに対して、TFMAはラベルだけを取るのメトリックをサポートすることに注意してください(すなわちy_true)、予測(y_pred)、およびへのパラメータとして例えば、重量(sample_weight) update_state方法。

Kerasメトリックの例

以下は、カスタム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その実施とし、その後のことを確認メトリックモジュールは、評価時点で利用可能です。

メトリック

A tfma.metrics.Metric実装は、メトリクス値をcalcuateするために必要な計算を作成するための関数(おそらく複数)と共にメトリック構成を定義kwargsからのセットで構成されています。 :使用できる2つの主演算種類がありtfma.metrics.MetricComputationtfma.metrics.DerivedMetricComputation以下のセクションに記載されています。これらの計算を作成する関数には、次のパラメーターが入力として渡されます。

  • eval_config: tfam.EvalConfig
    • エバリュエーターに渡されるeval構成(使用する予測キーなどのモデル仕様設定を検索するのに役立ちます)。
  • 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
    • クエリ/ランキングベースのメトリックを計算する場合に使用されるクエリキー。

メトリックがこれらの設定の1つ以上に関連付けられていない場合、それらのパラメーターがシグニチャー定義から除外される可能性があります。

メトリックは各モデル、出力、およびサブキーに同じように計算されている場合、ユーティリティtfma.metrics.merge_per_key_computations別々にこれらの入力の各々について同じ計算を実行するために使用することができます。

MetricComputation

A MetricComputationの組み合わせで構成されてpreprocessorcombinerpreprocessorあるbeam.DoFnその入力として抽出液を取り、(参照コンバイナによって使用される初期状態を出力アーキテクチャを抽出何であるかについての情報のため)。場合はpreprocessor定義されていない場合、コンバイナが渡されますStandardMetricInputsを(標準メトリック入力は、ラベル、予測、およびexample_weightsが含まれています)。 combinerあるbeam.CombineFnその入力として(スライスキー、プリプロセッサの出力)のタプルをとり、その結果として(slice_key、メトリック結果辞書)のタプルを出力します。

スライスの間起こることに注意preprocessor及び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],
          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

A DerivedMetricComputation他のメトリックの計算の出力に基づいてメトリック値を計算するために使用される結果の関数で構成されています。結果関数は、計算された値のdictを入力として受け取り、追加のメトリック結果のdictを出力します。

派生計算が依存する計算をメトリックによって作成された計算のリストに含めることは許容される(推奨される)ことに注意してください。これにより、複数のメトリック間で共有される計算を事前に作成して渡す必要がなくなります。評価者は、同じ定義を持つ計算を自動的に重複排除するため、1つの計算が実際に実行されます。

TJURメトリック派生メトリックの良い例を提供します。