Ringkasan
TFMA mendukung memvalidasi model dengan mendirikan ambang batas nilai dan ambang perubahan berdasarkan metrik didukung .
Konfigurasi
Ambang Nilai Generik
Nilai ambang berguna untuk gerbang model kandidat dengan memeriksa apakah metrik yang sesuai 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 adalah default ke tak terhingga negatif jika tidak disetel, dan batas_atas default ke tak terhingga 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))
GenericChangeThreshold
Ambang batas perubahan berguna untuk gerbang model kandidat dengan memeriksa apakah metrik yang sesuai lebih besar/lebih kecil daripada model dasar. Ada dua cara untuk mengukur perubahan: perubahan absolut dan perubahan relatif. Perubahan aboslute dihitung sebagai nilai perubahannya antara metrik calon dan dasar Model, yaitu, v_c - v_b mana v_c menunjukkan nilai metrik calon dan v_b menunjukkan nilai dasar. Nilai relatif adalah perbedaan relatif antara metrik calon dan baseline, yaitu, v_c / v_b. Ambang absolut dan ambang relatif dapat hidup berdampingan dengan model gerbang dengan kedua kriteria. Selain mengatur nilai ambang batas, pengguna juga perlu mengonfigurasi MetricDirection. untuk metrik dengan nilai yang lebih tinggi (misalnya, AUC), tetapkan arah ke HIGHER_IS_BETTER, untuk metrik dengan nilai yang lebih rendah (misalnya, rugi), tetapkan arah ke LOWER_IS_BETTER. Ambang batas perubahan memerlukan model dasar untuk dievaluasi bersama dengan model kandidat. Lihat Mendapatkan panduan Memulai untuk contoh.
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 sesuatu
Contoh berikut menggabungkan nilai dan ambang batas 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 diatur ke gerbang pada kedua model metrik Waktu Pelatihan (baik model yang disimpan EvalSavedModel atau Keras) dan metrik Pasca Pelatihan (didefinisikan dalam konfigurasi TFMA). Untuk metrik Waktu Pelatihan, ambang batas ditentukan dalam 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 adalah contoh bersama dengan pengaturan lain 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 payload adalah ValidationResult . Outputnya akan memiliki "validation_ok" yang disetel ke True ketika tidak ada kegagalan. Ketika ada kegagalan, informasi diberikan tentang metrik terkait, ambang batas, dan nilai metrik yang diamati. Berikut ini adalah contoh di mana "weighted_examle_count" gagal pada ambang 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 }
}
}
}