Comenzando con el análisis del modelo TensorFlow

Descripción general

TensorFlow Model Analysis (TFMA) es una biblioteca para realizar evaluaciones de modelos.

  • Para : ingenieros de aprendizaje automático o científicos de datos
  • quién : quiere analizar y comprender sus modelos de TensorFlow
  • es : una biblioteca independiente o un componente de una canalización TFX
  • que : evalúa modelos sobre grandes cantidades de datos de forma distribuida según las mismas métricas definidas en el entrenamiento. Estas métricas se comparan en porciones de datos y se visualizan en cuadernos de Jupyter o Colab.
  • a diferencia : algunas herramientas de introspección de modelos como tensorboard que ofrecen introspección de modelos

TFMA realiza sus cálculos de forma distribuida sobre grandes cantidades de datos utilizando Apache Beam . Las siguientes secciones describen cómo configurar un proceso de evaluación TFMA básico. Consulte la arquitectura para obtener más detalles sobre la implementación subyacente.

Si solo desea comenzar y comenzar, consulte nuestro cuaderno de colaboración .

Esta página también se puede ver desde tensorflow.org .

Tipos de modelos admitidos

TFMA está diseñado para admitir modelos basados ​​en tensorflow, pero se puede ampliar fácilmente para admitir también otros marcos. Históricamente, TFMA requería la creación de un EvalSavedModel para usar TFMA, pero la última versión de TFMA admite múltiples tipos de modelos según las necesidades del usuario. Solo debería ser necesario configurar un EvalSavedModel si se utiliza un modelo basado en tf.estimator y se requieren métricas de tiempo de entrenamiento personalizadas.

Tenga en cuenta que debido a que TFMA ahora se ejecuta según el modelo de publicación, TFMA ya no evaluará automáticamente las métricas agregadas en el momento del entrenamiento. La excepción a este caso es si se utiliza un modelo de Keras, ya que Keras guarda las métricas utilizadas junto con el modelo guardado. Sin embargo, si este es un requisito estricto, el TFMA más reciente es compatible con versiones anteriores, de modo que aún se puede ejecutar un EvalSavedModel en una canalización TFMA.

La siguiente tabla resume los modelos admitidos de forma predeterminada:

Tipo de modelo Métricas de tiempo de entrenamiento Métricas posteriores a la capacitación
TF2 (keras) Sí* Y
TF2 (genérico) N / A Y
EvalSavedModel (estimador) Y Y
Ninguno (pd.DataFrame, etc.) N / A Y
  • Las métricas de tiempo de entrenamiento se refieren a métricas definidas en el momento del entrenamiento y guardadas con el modelo (ya sea TFMA EvalSavedModel o el modelo guardado de Keras). Las métricas posteriores al entrenamiento se refieren a las métricas agregadas a través de tfma.MetricConfig .
  • Los modelos genéricos TF2 son modelos personalizados que exportan firmas que pueden usarse para inferencia y no se basan ni en keras ni en estimadores.

Consulte las preguntas frecuentes para obtener más información sobre cómo instalar y configurar estos diferentes tipos de modelos.

Configuración

Antes de ejecutar una evaluación, se requiere una pequeña configuración. Primero, se debe definir un objeto tfma.EvalConfig que proporcione especificaciones para el modelo, las métricas y los sectores que se van a evaluar. En segundo lugar, es necesario crear un tfma.EvalSharedModel que apunte al modelo (o modelos) real que se utilizará durante la evaluación. Una vez definidos, la evaluación se realiza llamando tfma.run_model_analysis con un conjunto de datos apropiado. Para obtener más detalles, consulte la guía de configuración .

Si se ejecuta dentro de una canalización TFX, consulte la guía TFX para saber cómo configurar TFMA para que se ejecute como un componente TFX Evaluator .

Ejemplos

Evaluación de modelo único

A continuación se utiliza tfma.run_model_analysis para realizar una evaluación en un modelo de servicio. Para obtener una explicación de las diferentes configuraciones necesarias, consulte la guía de configuración .

# Run in a Jupyter Notebook.
from google.protobuf import text_format

eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  ## Post export metric information
  metrics_specs {
    # This adds AUC as a post training metric. If the model has built in
    # training metrics which also contains AUC, this metric will replace it.
    metrics { class_name: "AUC" }
    # ... other post training metrics ...

    # Plots are also configured here...
    metrics { class_name: "ConfusionMatrixPlot" }
  }
  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["age"]
  }
""", tfma.EvalConfig())

eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path='/path/to/saved/model', eval_config=eval_config)

eval_result = tfma.run_model_analysis(
    eval_shared_model=eval_shared_model,
    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)

Para una evaluación distribuida, construya una canalización de Apache Beam utilizando un ejecutor distribuido. En el proceso, utilice tfma.ExtractEvaluateAndWriteResults para evaluar y escribir los resultados. Los resultados se pueden cargar para visualización usando tfma.load_eval_result .

Por ejemplo:

# To run the pipeline.
from google.protobuf import text_format
from tfx_bsl.tfxio import tf_example_record

eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  ## Post export metric information
  metrics_specs {
    # This adds AUC and as a post training metric. If the model has built in
    # training metrics which also contains AUC, this metric will replace it.
    metrics { class_name: "AUC" }
    # ... other post training metrics ...

    # Plots are also configured here...
    metrics { class_name: "ConfusionMatrixPlot" }
  }
  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["age"]
  }
""", tfma.EvalConfig())

eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path='/path/to/saved/model', eval_config=eval_config)

output_path = '/path/for/output'

tfx_io = tf_example_record.TFExampleRecord(
    file_pattern=data_location, raw_record_column_name=tfma.ARROW_INPUT_COLUMN)

with beam.Pipeline(runner=...) as p:
  _ = (p
       # You can change the source as appropriate, e.g. read from BigQuery.
       # This assumes your data is a TFRecords file containing records in the
       # tf.train.Example format. If using EvalSavedModel then use the following
       # instead: 'ReadData' >> beam.io.ReadFromTFRecord(file_pattern=...)
       | 'ReadData' >> tfx_io.BeamSource()
       | 'ExtractEvaluateAndWriteResults' >>
       tfma.ExtractEvaluateAndWriteResults(
            eval_shared_model=eval_shared_model,
            eval_config=eval_config,
            output_path=output_path))

# To load and visualize results.
# Note that this code should be run in a Jupyter Notebook.
result = tfma.load_eval_result(output_path)
tfma.view.render_slicing_metrics(result)

Validación del modelo

Para realizar la validación del modelo con un candidato y una línea de base, actualice la configuración para incluir una configuración de umbral y pase dos modelos a tfma.run_model_analysis .

Por ejemplo:

# Run in a Jupyter Notebook.
from google.protobuf import text_format

eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  ## Post export metric information
  metrics_specs {
    # This adds AUC and as a post training metric. If the model has built in
    # training metrics which also contains AUC, this metric will replace it.
    metrics {
      class_name: "AUC"
      threshold {
        value_threshold {
          lower_bound { value: 0.9 }
        }
        change_threshold {
          direction: HIGHER_IS_BETTER
          absolute { value: -1e-10 }
        }
      }
    }
    # ... other post training metrics ...

    # Plots are also configured here...
    metrics { class_name: "ConfusionMatrixPlot" }
  }
  ## Slicing information
  slicing_specs {}  # overall slice
  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),
]

output_path = '/path/for/output'

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

tfma.view.render_slicing_metrics(eval_result)
tfma.load_validation_result(output_path)

Visualización

Los resultados de la evaluación de TFMA se pueden visualizar en un cuaderno Jupyter utilizando los componentes de interfaz incluidos en TFMA. Por ejemplo:

Explorador de métricas de corte TFMA .

Más información