Genel Bakış
TFMA, desteklenen ölçümlere dayalı olarak değer eşikleri ve değişiklik eşikleri ayarlayarak bir modelin doğrulanmasını destekler.
Yapılandırma
Genel Değer Eşiği
Değer eşiği, ilgili metriklerin alt sınırdan büyük ve/veya üst sınırdan küçük olup olmadığını kontrol ederek aday modele geçit vermek için kullanışlıdır. Kullanıcı, alt_sınır ve üst_sınır değerlerinden birini veya her ikisini birden ayarlayabilir. Alt_sınır, ayarlanmadığında varsayılan olarak negatif sonsuzdur ve üst_sınır, ayarlanmadığında varsayılan olarak sonsuzdur.
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))
GenelDeğişimEşik
Eşiği değiştirme, ilgili metriğin temel modelden daha büyük/küçük olup olmadığını kontrol ederek aday modele geçiş yapmak için kullanışlıdır. Değişimin ölçülmesinin iki yolu vardır: mutlak değişim ve göreceli değişim. Mutlak değişim, adayın metrikleri ile temel model arasındaki değer farkı olarak hesaplanır, yani v_c - v_b burada v_c aday metrik değerini ve v_b temel değeri belirtir. Göreceli değer, adayın metriği ile temel arasındaki göreli farktır, yani v_c/v_b . Mutlak ve bağıl eşik, her iki kritere göre kapı modelinde bir arada bulunabilir. Eşik değerlerini ayarlamanın yanı sıra kullanıcının MetricDirection'ı da yapılandırması gerekir. daha yüksek değerlere sahip metrikler için (örneğin, AUC), yönü HIGHER_IS_BETTER olarak ayarlayın; daha düşük değerlere sahip metrikler için (örneğin, kayıp), yönü LOWER_IS_BETTER olarak ayarlayın. Değişim eşikleri, aday modelle birlikte bir temel modelin de değerlendirilmesini gerektirir. Örnek için Başlangıç kılavuzuna bakın.
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)
Eşyaları bir araya getirmek
Aşağıdaki örnek, değer ve değişiklik eşiklerini birleştirir:
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)
Yapılandırmayı protokol biçiminde yazmak daha okunabilir olabilir:
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, hem model Eğitim Süresi metriklerini (EvalSavedModel ya da Keras kayıtlı modeli) hem de Eğitim Sonrası metriklerini (TFMA yapılandırmasında tanımlı) kapsayacak şekilde ayarlanabilir. Eğitim Süresi ölçümleri için eşikler tfma.MetricsSpec'te belirtilir:
metrics_spec = tfma.MetricSpec(thresholds={'auc': auc_threshold})
Eğitim sonrası ölçümler için eşikler doğrudan tfma.MetricConfig'de tanımlanır:
metric_config = tfma.MetricConfig(class_name='TotalWeightedExample',
threshold=lower_bound)
EvalConfig'deki diğer ayarlarla birlikte bir örnek:
# 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)
Çıkış
Değerlendirici tarafından çıkarılan metrikler dosyasına ek olarak, doğrulama kullanıldığında ek bir "doğrulamalar" dosyası da çıktılanır. Yük formatı ValidationResult'tur . Hiçbir hata olmadığında çıktıda "validation_ok" True olarak ayarlanacaktır. Hatalar olduğunda ilgili metrikler, eşikler ve gözlemlenen metrik değerler hakkında bilgi sağlanır. Aşağıda "ağırlıklı_examle_count"un bir değer eşiğinde başarısız olduğu bir örnek verilmiştir (1,5, 1,0'dan küçük değildir, dolayısıyla başarısızlık):
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 }
}
}
}