El componente de canalización Evaluator TFX

El componente de canalización Evaluator TFX realiza un análisis profundo de los resultados del entrenamiento de sus modelos, para ayudarlo a comprender cómo se desempeña su modelo en subconjuntos de sus datos. El Evaluador también le ayuda a validar sus modelos exportados, asegurando que sean "lo suficientemente buenos" para pasar a producción.

Cuando la validación está habilitada, el evaluador compara nuevos modelos con una línea de base (como el modelo que se ofrece actualmente) para determinar si son "lo suficientemente buenos" en relación con la línea de base. Lo hace evaluando ambos modelos en un conjunto de datos de evaluación y calculando su rendimiento en métricas (por ejemplo, AUC, pérdida). Si las métricas del nuevo modelo cumplen con los criterios especificados por el desarrollador en relación con el modelo de referencia (por ejemplo, el AUC no es inferior), el modelo está "bendecido" (marcado como bueno), lo que indica al empujador que está bien llevar el modelo a producción.

  • Consume:
    • Una división de evaluación de ejemplos
    • Un modelo entrenado de Trainer
    • Un modelo previamente bendecido (si se va a realizar validación)
  • Emite:

Análisis del modelo Evaluador y TensorFlow

Evaluator aprovecha la biblioteca de análisis de modelos de TensorFlow para realizar el análisis, que a su vez utiliza Apache Beam para el procesamiento escalable.

Uso del componente evaluador

Un componente de canalización de Evaluator suele ser muy fácil de implementar y requiere poca personalización, ya que la mayor parte del trabajo lo realiza el componente Evaluator TFX.

Para configurar el evaluador se necesita la siguiente información:

Si se va a incluir la validación, se necesita la siguiente información adicional:

Cuando esté habilitado, la validación se realizará con todas las métricas y sectores que se definieron.

El código típico se ve así:

import tensorflow_model_analysis as tfma
...

# For TFMA evaluation

eval_config = tfma.EvalConfig(
    model_specs=[
        # This assumes a serving model with signature 'serving_default'. If
        # using estimator based EvalSavedModel, add signature_name='eval' and
        # remove the label_key. Note, if using a TFLite model, then you must set
        # model_type='tf_lite'.
        tfma.ModelSpec(label_key='<label_key>')
    ],
    metrics_specs=[
        tfma.MetricsSpec(
            # The metrics added here are in addition to those saved with the
            # model (assuming either a keras model or EvalSavedModel is used).
            # Any metrics added into the saved model (for example using
            # model.compile(..., metrics=[...]), etc) will be computed
            # automatically.
            metrics=[
                tfma.MetricConfig(class_name='ExampleCount'),
                tfma.MetricConfig(
                    class_name='BinaryAccuracy',
                    threshold=tfma.MetricThreshold(
                        value_threshold=tfma.GenericValueThreshold(
                            lower_bound={'value': 0.5}),
                        change_threshold=tfma.GenericChangeThreshold(
                            direction=tfma.MetricDirection.HIGHER_IS_BETTER,
                            absolute={'value': -1e-10})))
            ]
        )
    ],
    slicing_specs=[
        # An empty slice spec means the overall slice, i.e. the whole dataset.
        tfma.SlicingSpec(),
        # Data can be sliced along a feature column. In this case, data is
        # sliced along feature column trip_start_hour.
        tfma.SlicingSpec(feature_keys=['trip_start_hour'])
    ])

# The following component is experimental and may change in the future. This is
# required to specify the latest blessed model will be used as the baseline.
model_resolver = Resolver(
      strategy_class=dsl.experimental.LatestBlessedModelStrategy,
      model=Channel(type=Model),
      model_blessing=Channel(type=ModelBlessing)
).with_id('latest_blessed_model_resolver')

model_analyzer = Evaluator(
      examples=examples_gen.outputs['examples'],
      model=trainer.outputs['model'],
      baseline_model=model_resolver.outputs['model'],
      # Change threshold will be ignored if there is no baseline (first run).
      eval_config=eval_config)

El evaluador produce un EvalResult (y opcionalmente un ValidationResult si se usó validación) que se puede cargar usando TFMA . El siguiente es un ejemplo de cómo cargar los resultados en un cuaderno Jupyter:

import tensorflow_model_analysis as tfma

output_path = evaluator.outputs['evaluation'].get()[0].uri

# Load the evaluation results.
eval_result = tfma.load_eval_result(output_path)

# Visualize the metrics and plots using tfma.view.render_slicing_metrics,
# tfma.view.render_plot, etc.
tfma.view.render_slicing_metrics(tfma_result)
...

# Load the validation results
validation_result = tfma.load_validation_result(output_path)
if not validation_result.validation_ok:
  ...

Hay más detalles disponibles en la referencia de la API del evaluador .