Validasi Model Analisis Model Tensorflow

Ringkasan

TFMA mendukung validasi model dengan menyiapkan ambang batas nilai dan mengubah ambang batas berdasarkan metrik yang didukung .

Konfigurasi

Ambang Nilai Generik

Nilai ambang batas berguna untuk memasukkan model kandidat dengan memeriksa apakah metrik terkait lebih besar dari batas bawah dan/atau lebih kecil dari batas atas. Pengguna dapat menyetel salah satu atau kedua nilai batas_bawah dan batas_atas. Batas_bawah secara default adalah tak terhingga negatif jika tidak disetel, dan batas_atas ditetapkan secara default menjadi tak terbatas jika tidak disetel.

import tensorflow_model_analysis as tfma

lower_bound = tfma.GenericValueThreshold(lower_bound={'value':0})
upper_bound = tfma.GenericValueThreshold(upper_bound={'value':1})
lower_upper_bound = tfma.GenericValueThreshold(lower_bound={'value':0},
                                               upper_bound={'value':1))

Ambang Perubahan Generik

Ambang batas perubahan berguna untuk memasukkan model kandidat dengan memeriksa apakah metrik terkait lebih besar/lebih kecil dibandingkan dengan model dasar. Ada dua cara untuk mengukur perubahan: perubahan absolut dan perubahan relatif. Perubahan absolut dihitung sebagai selisih nilai antara metrik kandidat dan model dasar, yaitu v_c - v_b dimana v_c menunjukkan nilai metrik kandidat dan v_b menunjukkan nilai dasar. Nilai relatif adalah perbedaan relatif antara metrik kandidat dan baseline, yaitu v_c/v_b . Ambang batas absolut dan relatif dapat hidup berdampingan pada model gerbang dengan kedua kriteria tersebut. Selain menyiapkan nilai ambang batas, pengguna juga perlu mengonfigurasi MetricDirection. untuk metrik dengan nilai yang lebih tinggi (misalnya, AUC), tetapkan arahnya ke HIGHER_IS_BETTER, untuk metrik dengan nilai yang lebih rendah (misalnya, kerugian), tetapkan arahnya ke LOWER_IS_BETTER. Ambang batas perubahan memerlukan model dasar untuk dievaluasi bersama dengan model kandidat. Lihat panduan Memulai untuk contohnya.

import tensorflow_model_analysis as tfma

absolute_higher_is_better = tfma.GenericChangeThreshold(absolute={'value':1},
                                                        direction=tfma.MetricDirection.HIGHER_IS_BETTER)
absolute_lower_is_better = tfma.GenericChangeThreshold(absolute={'value':1},
                                                       direction=tfma.MetricDirection.LOWER_IS_BETTER)
relative_higher_is_better = tfma.GenericChangeThreshold(relative={'value':1},
                                                        direction=tfma.MetricDirection.HIGHER_IS_BETTER)
relative_lower_is_better = tfma.GenericChangeThreshold(relative={'value':1},
                                                       direction=tfma.MetricDirection.LOWER_IS_BETTER)
absolute_and_relative = tfma.GenericChangeThreshold(relative={'value':1},
                                                    absolute={'value':0.2},
                                                    direction=tfma.MetricDirection.LOWER_IS_BETTER)

Menyatukan semuanya

Contoh berikut menggabungkan ambang batas nilai dan perubahan:

import tensorflow_model_analysis as tfma

lower_bound = tfma.GenericValueThreshold(lower_bound={'value':0.7})
relative_higher_is_better =
    tfma.GenericChangeThreshold(relative={'value':1.01},
                                direction=tfma.MetricDirection.HIGHER_IS_BETTER)
auc_threshold = tfma.MetricThreshold(value_threshold=lower_bound,
                                     change_threshold=relative_higher_is_better)

Mungkin lebih mudah dibaca untuk menuliskan konfigurasi dalam format proto:

from google.protobuf import text_format

auc_threshold = text_format.Parse("""
  value_threshold { lower_bound { value: 0.6 } }
  change_threshold { relative { value: 1.01 } }
""", tfma.MetricThreshold())

MetricThreshold dapat disetel ke gerbang pada metrik Waktu Pelatihan model (baik model tersimpan EvalSavedModel atau Keras) dan metrik Pasca Pelatihan (ditentukan dalam konfigurasi TFMA). Untuk metrik Waktu Pelatihan, ambang batas ditentukan di tfma.MetricsSpec:

metrics_spec = tfma.MetricSpec(thresholds={'auc': auc_threshold})

Untuk metrik pasca pelatihan, ambang batas ditentukan langsung di tfma.MetricConfig:

metric_config = tfma.MetricConfig(class_name='TotalWeightedExample',
                                  threshold=lower_bound)

Berikut ini contoh beserta pengaturan lainnya di EvalConfig:

# Run in a Jupyter Notebook.
from google.protobuf import text_format

eval_config = text_format.Parse("""
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  metrics_spec {
    # Training Time metric thresholds
    thresholds {
      key: "auc"
      value: {
        value_threshold {
          lower_bound { value: 0.7 }
        }
        change_threshold {
          direction: HIGHER_IS_BETTER
          absolute { value: -1e-10 }
        }
      }
    }
    # Post Training metrics and their thesholds.
    metrics {
      # This assumes a binary classification model.
      class_name: "AUC"
      threshold {
        value_threshold {
          lower_bound { value: 0 }
        }
      }
    }
  }
  slicing_specs {}
  slicing_specs {
    feature_keys: ["age"]
  }
""", tfma.EvalConfig())

eval_shared_models = [
  tfma.default_eval_shared_model(
      model_name=tfma.CANDIDATE_KEY,
      eval_saved_model_path='/path/to/saved/candiate/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")

tfma.view.render_slicing_metrics(eval_result)
tfma.load_validation_result(output_path)

Keluaran

Selain keluaran file metrik oleh evaluator, saat validasi digunakan, file "validasi" tambahan juga dikeluarkan. Format muatannya adalah ValidationResult . Outputnya akan memiliki "validation_ok" yang disetel ke True bila tidak ada kegagalan. Ketika terjadi kegagalan, informasi diberikan tentang metrik terkait, ambang batas, dan nilai metrik yang diamati. Berikut ini adalah contoh di mana "weighted_examle_count" gagal mencapai ambang batas nilai (1,5 tidak lebih kecil dari 1,0, sehingga gagal):

  validation_ok: False
  metric_validations_per_slice {
    failures {
      metric_key {
        name: "weighted_example_count"
        model_name: "candidate"
      }
      metric_threshold {
        value_threshold {
          upper_bound { value: 1.0 }
        }
      }
      metric_value {
        double_value { value: 1.5 }
      }
    }
  }