Se usó la API de Cloud Translation para traducir esta página.
Switch to English

El componente de canalización Evaluator TFX

El componente de canalización Evaluator TFX realiza un análisis profundo de los resultados de entrenamiento para 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, asegurándose de que sean "lo suficientemente buenos" para llevarlos a producción.

Cuando la validación está habilitada, el evaluador compara los 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 desempeño 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 línea de base (por ejemplo, el AUC no es más bajo), el modelo es "bendecido" (marcado como bueno), lo que indica al Pusher que está bien impulsar el modelo a producción.

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

Análisis de modelo de evaluador y TensorFlow

Evaluator aprovecha la biblioteca de análisis de modelos de TensorFlow para realizar el análisis, que a su vez usa Apache Beam para un 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 segmentos que se definieron.

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

from tfx import components
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')
            ],
            # To add validation thresholds for metrics saved with the model,
            # add them keyed by metric name to the thresholds map.
            thresholds = {
                "binary_accuracy": 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 = ResolverNode(
      instance_name='latest_blessed_model_resolver',
      resolver_class=latest_blessed_model_resolver.LatestBlessedModelResolver,
      model=Channel(type=Model),
      model_blessing=Channel(type=ModelBlessing))

model_analyzer = components.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)