Tensorflow Model Analizi Model Doğrulamaları

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)

Çıktı

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