Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Introduzione all'analisi del modello TensorFlow

  • Per : ingegneri di machine learning o data scientist
  • chi : desidera analizzare e comprendere i propri modelli TensorFlow
  • è : una libreria standalone o un componente di una pipeline TFX
  • che : valuta i modelli su grandi quantità di dati in modo distribuito sulle stesse metriche definite nella formazione. Queste metriche vengono confrontate su sezioni di dati e visualizzate nei notebook Jupyter o Colab.
  • a differenza di : alcuni strumenti di introspezione del modello come tensorboard che offrono l'introspezione del modello

TFMA esegue i suoi calcoli in modo distribuito su grandi quantità di dati utilizzando Apache Beam . Le sezioni seguenti descrivono come impostare una pipeline di valutazione TFMA di base. Vedi l' architettura più dettagli sull'implementazione sottostante.

Tipi di modello supportati

TFMA è progettato per supportare modelli basati su tensorflow, ma può essere facilmente esteso per supportare anche altri framework. Storicamente, TFMA richiedeva la creazione di un EvalSavedModel per utilizzare TFMA, ma l'ultima versione di TFMA supporta più tipi di modelli a seconda delle esigenze dell'utente. L'impostazione di EvalSavedModel dovrebbe essere richiesta solo se viene utilizzato un modello basato su tf.estimator e sono richieste metriche del tempo di formazione personalizzate.

Tieni presente che poiché TFMA ora viene eseguito in base al modello di pubblicazione, TFMA non valuterà più automaticamente le metriche aggiunte al momento dell'addestramento. L'eccezione a questo caso è se viene utilizzato un modello keras poiché keras salva le metriche utilizzate insieme al modello salvato. Tuttavia, se questo è un requisito fondamentale, l'ultimo TFMA è compatibile con le versioni precedenti in modo che un EvalSavedModel possa ancora essere eseguito in una pipeline TFMA.

La tabella seguente riassume i modelli supportati di default:

Tipo di modello Metriche del tempo di allenamento Metriche post allenamento
TF2 (keras) Y * Y
TF2 (generico) N / A Y
EvalSavedModel (stima) Y Y
Nessuno (pd.DataFrame, ecc.) N / A Y
  • Le metriche del tempo di allenamento si riferiscono alle metriche definite al momento dell'addestramento e salvate con il modello (TFMA EvalSavedModel o modello salvato keras). Le metriche post allenamento si riferiscono alle metriche aggiunte tramite tfma.MetricConfig .
  • I modelli TF2 generici sono modelli personalizzati che esportano firme che possono essere utilizzate per inferenza e non sono basati su keras o stimatore.

Vedere le domande frequenti per ulteriori informazioni su come impostare e configurare questi diversi tipi di modello.

Esempi

Valutazione del modello singolo

Di seguito viene utilizzato tfma.run_model_analysis per eseguire la valutazione su un modello di pubblicazione. Per una spiegazione delle diverse impostazioni necessarie, consultare la guida all'installazione .

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

Per la valutazione distribuita, costruisci una pipeline Apache Beam utilizzando un runner distribuito. Nella pipeline, usa tfma.ExtractEvaluateAndWriteResults per la valutazione e per scrivere i risultati. I risultati possono essere caricati per la visualizzazione utilizzando tfma.load_eval_result .

Per esempio:

# To run the pipeline.
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)

output_path = '/path/for/output'

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.
       | 'ReadData' >> beam.io.ReadFromTFRecord(
           '/path/to/file/containing/tfrecords')
       | '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)

Validazione del modello

Per eseguire la convalida del modello rispetto a una candiate e una baseline, aggiorna la configurazione per includere un'impostazione di soglia e passa due modelli a tfma.run_model_analysis .

Per esempio:

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

Visualizzazione

I risultati della valutazione TFMA possono essere visualizzati in un notebook Jupyter utilizzando i componenti frontend inclusi in TFMA. Per esempio:

Browser metriche di sezionamento TFMA .

Maggiori informazioni