Validations du modèle d'analyse du modèle Tensorflow

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Aperçu

TFMA prend en charge la validation d' un modèle en définissant des seuils de valeur et les seuils de changement en fonction des paramètres pris en charge .

Configuration

Seuil de valeur générique

Le seuil de valeur est utile pour verrouiller le modèle candidat en vérifiant si la métrique correspondante est supérieure à une limite inférieure et/ou inférieure à une limite supérieure. L'utilisateur peut définir une ou les deux valeurs lower_bound et upper_bound. Lower_bound est par défaut à l'infini négatif s'il n'est pas défini, et upper_bound est par défaut à l'infini s'il n'est pas défini.

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

Seuil de changement générique

Le seuil de changement est utile pour verrouiller le modèle candidat en vérifiant si la métrique correspondante est plus grande/plus petite que celle d'un modèle de référence. Le changement peut être mesuré de deux manières : le changement absolu et le changement relatif. Aboslute changement est calculé comme la valeur diference entre les paramètres du modèle de candidat et de base, à savoir, V_C - V_BV_C désigne la valeur métrique candidat et V_B indique la valeur de référence. La valeur relative est la différence relative entre la métrique du candidat et la ligne de base, à savoir, V_C / V_B. Le seuil absolu et le seuil relatif peuvent coexister au modèle de porte par les deux critères. Outre la configuration des valeurs de seuil, l'utilisateur doit également configurer MetricDirection. pour les métriques avec des valeurs favorablement plus élevées (par exemple, AUC), définissez la direction sur HIGHER_IS_BETTER, pour les métriques avec des valeurs favorablement inférieures (par exemple, perte), définissez la direction sur LOWER_IS_BETTER. Les seuils de changement nécessitent qu'un modèle de référence soit évalué avec le modèle candidat. Voir Guide de démarrage pour un exemple.

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)

Mettre les choses ensemble

L'exemple suivant combine des seuils de valeur et de changement :

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)

Il serait peut-être plus lisible d'écrire la configuration au 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())

Le MetricThreshold peut être défini pour s'appliquer à la fois aux métriques de temps d'entraînement du modèle (soit EvalSavedModel, soit au modèle enregistré Keras) et aux métriques de post-entraînement (définies dans la configuration TFMA). Pour les métriques de temps d'entraînement, les seuils sont spécifiés dans tfma.MetricsSpec :

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

Pour les métriques post-formation, les seuils sont définis directement dans le tfma.MetricConfig :

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

Voici un exemple avec les autres paramètres dans 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)

Sortir

En plus du fichier de métriques sorti par l'évaluateur, lorsque la validation est utilisée, un fichier "validations" supplémentaire est également sorti. Le format de la charge utile est ValidationResult . La sortie aura "validation_ok" défini sur True lorsqu'il n'y a pas d'échec. En cas d'échec, des informations sont fournies sur les métriques associées, les seuils et les valeurs de métrique qui ont été observées. Ce qui suit est un exemple où le "weighted_examle_count" échoue à un seuil de valeur (1,5 n'est pas inférieur à 1,0, donc l'échec) :

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