Ayuda a proteger la Gran Barrera de Coral con TensorFlow en Kaggle Únete Challenge

Introducción al análisis de modelos de TensorFlow

Descripción general

TensorFlow Model Analysis (TFMA) es una biblioteca para realizar la evaluación de modelos.

  • Por: Machine Learning ingenieros o científicos de datos
  • que: querer analizar y comprender sus modelos TensorFlow
  • que es: una biblioteca independiente o componente de una tubería TFX
  • que: Evalúa modelos en grandes cantidades de datos de una manera distribuida en las mismas métricas definidas en la formación. Estas métricas se comparan en porciones de datos y se visualizan en cuadernos de Jupyter o Colab.
  • al contrario: algunas herramientas modelo de introspección como tensorboard que la oferta modelo de la introspección

TFMA realiza sus cálculos de una manera distribuida sobre grandes cantidades de datos utilizando Apache Beam . Las siguientes secciones describen cómo configurar una canalización de evaluación básica de TFMA. Ver arquitectura más detalles sobre la aplicación subyacente.

Si lo que desea es entrar y empezar, visita nuestra colab portátil.

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 también se puede ampliar fácilmente para admitir otros marcos. Históricamente, TFMA requiere una EvalSavedModel ser creado para utilizar TFMA, pero la versión más reciente de TFMA soporta múltiples tipos de modelos en función de las necesidades del usuario. La creación de un EvalSavedModel sólo debería ser necesario si un tf.estimator se utiliza modelo basado y se requieren métricas de tiempo de entrenamiento personalizado.

Tenga en cuenta que debido a que TFMA ahora se ejecuta en función del modelo de servicio, TFMA ya no evaluará automáticamente las métricas agregadas en el momento del entrenamiento. La excepción a este caso es si se usa un modelo de keras, ya que keras guarda las métricas usadas junto con el modelo guardado. Sin embargo, si esto es un requisito duro, la última TFMA es compatible hacia atrás de modo que un EvalSavedModel todavía se puede ejecutar en una tubería TFMA.

La siguiente tabla resume los modelos admitidos por defecto:

Tipo de modelo Métricas de tiempo de entrenamiento Métricas posteriores al entrenamiento
TF2 (keras) Y* 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 las métricas definidas en el tiempo de entrenamiento y guardadas con el modelo (ya sea TFMA EvalSavedModel o modelo guardado de Keras). Métricas de formación post se refiere a indicadores agregados a través de tfma.MetricConfig .
  • Los modelos genéricos de TF2 son modelos personalizados que exportan firmas que se pueden usar para la inferencia y no se basan en keras ni en el estimador.

Ver Preguntas frecuentes para obtener más información hay cómo instalar y configurar estos diferentes tipos de modelos.

Configuración

Antes de ejecutar una evaluación, se requiere una pequeña cantidad de configuración. En primer lugar, un tfma.EvalConfig objeto debe ser definido que proporciona especificaciones para el modelo, métricas, y las rebanadas que van a ser evaluados. En segundo lugar un tfma.EvalSharedModel necesita ser creada que apunta al modelo real (o modelos) que se utilizarán durante la evaluación. Una vez que éstos hayan sido definidos, la evaluación se realiza llamando tfma.run_model_analysis con un conjunto de datos apropiado. Para más detalles, consulte la configuración de guía.

Si se ejecuta dentro de una tubería TFX, ver el TFX guía para saber cómo configurar TFMA para funcionar como un TFX Evaluador componente.

Ejemplos

Evaluación de modelo único

Los siguientes usos tfma.run_model_analysis para llevar a cabo la evaluación en un modelo de servir. Para una explicación de los diferentes ajustes necesarios ver la configuración de guía.

# 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" }
    # ... 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 la evaluación distribuida, construir un Apache Beam tubería usando un corredor distribuida. En la tubería, utilizar los tfma.ExtractEvaluateAndWriteResults para la evaluación y para escribir los resultados. Los resultados se pueden cargar para la 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)

Modelo de validación

Para llevar a cabo la validación del modelo contra un candiate y la línea base, actualizar la configuración para incluir una configuración de umbral y pasar dos modelos para 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:

Navegador de métricas de corte TFMA .

Más información