Ukrayna için DevFest'te bize katılın 14-15 Haziran Online Şimdi kaydolun

Tensorflow Model Analizi Model Doğrulamaları

genel bakış

TFMA değeri eşikleri ve dayalı değişim eşikleri kurarak bir model doğrulama destekler desteklenen metrikleri .

Yapılandırma

GenelDeğer Eşiği

Değer eşiği, karşılık gelen metriklerin bir alt sınırdan büyük ve/veya bir üst sınırdan küçük olup olmadığını kontrol ederek aday modeli kapılamak için kullanışlıdır. Kullanıcı, alt_bağ ve üst_bağ değerlerinden birini veya her ikisini ayarlayabilir. Alt_sınır ayarlanmadıysa varsayılan olarak negatif sonsuzdur ve üst_sınır ayarlanmadıysa 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şim Eşiği

Değişim eşiği, karşılık gelen metriğin bir temel modelinkinden daha büyük/küçük olup olmadığını kontrol ederek aday modeli kapılamak için kullanışlıdır. Değişimin ölçülebilmesinin iki yolu vardır: mutlak değişim ve göreli değişim. Aboslute değişiklik aday ve referans modelinin metrikleri arasındaki değer farkı olarak hesaplanır, yani v_c - v_b burada v_c belirtmektedir aday metrik değer ve v_b taban çizgisi değeri belirtir. Bağıl değeri aday metrik ve taban, yani v_c / v_b arasındaki nispi farktır. Mutlak ve göreli eşik, her iki kritere göre kapı modeli için bir arada bulunabilir. Eşik değerlerini ayarlamanın yanı sıra, kullanıcının MetricDirection'ı da yapılandırması gerekir. olumlu şekilde daha yüksek değerlere (örneğin, AUC) sahip metrikler için yönü YÜKSEK_IS_BETTER olarak ayarlayın, olumlu şekilde daha düşük değerlere (örneğin kayıp) sahip metrikler için yönü LOWER_IS_BETTER olarak ayarlayın. Değişiklik eşikleri, aday modelle birlikte değerlendirilmek üzere bir temel model gerektirir. Bkz Başlangıç kılavuzu bir örnek için.

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ı proto biçiminde yazmak daha okunaklı 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 metriklerine (EvalSavedModel veya Keras kayıtlı model) hem de Eğitim Sonrası metriklerine (TFMA yapılandırmasında tanımlanmıştır) geçit verecek şekilde ayarlanabilir. Eğitim Süresi metrikleri 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 içinde 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 metrik dosyası çıktısına ek olarak, doğrulama kullanıldığında ek bir "doğrulama" dosyası da çıkar. Yük biçimidir ValidationResult . Hata olmadığında çıktıda "validation_ok" True olarak ayarlanır. Hatalar olduğunda, ilişkili metrikler, eşikler ve gözlemlenen metrik değerleri hakkında bilgi sağlanır. Aşağıdaki, "ağırlıklı_örnek_sayısı"nın bir değer eşiğinde başarısız olduğu bir örnektir (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 }
      }
    }
  }