Odpowiedz już dziś na lokalne wydarzenie TensorFlow Everywhere!
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Walidacje modelu analizy modelu Tensorflow

Przegląd

TFMA obsługuje walidację modelu poprzez ustawienie wartości progowych i zmianę progów na podstawie obsługiwanych metryk .

Konfiguracja

GenericValueThreshold

Próg wartości jest przydatny do bramkowania modelu kandydata przez sprawdzenie, czy odpowiednie metryki są większe niż dolna granica i / lub mniejsze niż górna granica. Użytkownik może ustawić jedną lub obie wartości Lower_bound i Upper_bound. Lower_bound jest domyślnie ujemna nieskończoność, jeśli nie jest ustawiona, a upper_bound przyjmuje wartość domyślną nieskończoności, jeśli nie jest ustawiona.

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

Zmiana progu jest przydatna do bramkowania modelu kandydującego przez sprawdzenie, czy odpowiednia metryka jest większa / mniejsza niż w przypadku modelu bazowego. Zmianę można zmierzyć na dwa sposoby: zmianę bezwzględną i zmianę względną. Zmiana Aboslute jest obliczana jako różnica wartości między metrykami modelu kandydata i modelu bazowego, a mianowicie v_c - v_b, gdzie v_c oznacza wartość metryki kandydata, a v_b oznacza wartość odniesienia. Wartość względna to względna różnica między metryką kandydata a linią bazową, a mianowicie v_c / v_b . Absolutny i względny próg mogą współistnieć z modelem bramki według obu kryteriów. Oprócz ustawiania wartości progowych, użytkownik musi również skonfigurować MetricDirection. dla metryk o korzystnie wyższych wartościach (np. AUC) ustaw kierunek na HIGHER_IS_BETTER, dla metryk o korzystnie niższych wartościach (np. strata) ustaw kierunek na LOWER_IS_BETTER. Progi zmian wymagają oceny modelu bazowego wraz z modelem kandydującym. Przykład zawiera przewodnik Pierwsze kroki .

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)

Składanie rzeczy w całość

Poniższy przykład łączy wartości i zmiany progów:

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)

Bardziej czytelne może być zapisanie konfiguracji w formacie 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 można ustawić na bramę zarówno dla metryk czasu szkolenia modelu (zapisany model EvalSavedModel lub Keras), jak i metryk po treningu (zdefiniowanych w konfiguracji TFMA). W przypadku metryk czasu szkolenia progi są określone w tfma.MetricsSpec:

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

W przypadku metryk po treningu progi są definiowane bezpośrednio w tfma.MetricConfig:

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

Oto przykład wraz z innymi ustawieniami w 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)

Wynik

Oprócz pliku metryk wyprowadzanego przez oceniającego, gdy stosowana jest walidacja, wyprowadzany jest również dodatkowy plik „walidacji”. Format ładunku to ValidationResult . Dane wyjściowe będą miały parametr „validation_ok” ustawiony na True, gdy nie będzie żadnych błędów. W przypadku awarii dostarczane są informacje o powiązanych metrykach, progach i zaobserwowanych wartościach metryki. Poniżej znajduje się przykład, w którym „weighted_examle_count” nie osiąga progu wartości (1,5 jest nie mniejsze niż 1,0, a zatem błąd):

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