Bantuan melindungi Great Barrier Reef dengan TensorFlow pada Kaggle Bergabung Tantangan

Memulai Analisis Model TensorFlow

Gambaran

TensorFlow Model Analysis (TFMA) adalah library untuk melakukan evaluasi model.

  • Untuk : Insinyur Pembelajaran Mesin atau Ilmuwan Data
  • siapa : ingin menganalisis dan memahami model TensorFlow mereka
  • itu adalah : pustaka mandiri atau komponen pipeline TFX
  • that : mengevaluasi model pada sejumlah besar data secara terdistribusi pada metrik yang sama yang ditentukan dalam pelatihan. Metrik ini dibandingkan dengan beberapa bagian data, dan divisualisasikan di notebook Jupyter atau Colab.
  • tidak seperti : beberapa alat introspeksi model seperti tensorboard yang menawarkan introspeksi model

TFMA melakukan komputasi secara terdistribusi pada sejumlah besar data menggunakan Apache Beam . Bagian berikut menjelaskan cara menyiapkan pipeline evaluasi TFMA dasar. Lihat arsitektur lebih detail tentang implementasi yang mendasarinya.

Jika Anda hanya ingin terjun dan memulai, lihat buku catatan colab kami.

Halaman ini juga dapat dilihat dari tensorflow.org .

Jenis Model yang Didukung

TFMA dirancang untuk mendukung model berbasis tensorflow, tetapi dapat dengan mudah diperluas untuk mendukung kerangka kerja lain juga. Secara historis, TFMA mensyaratkan EvalSavedModel dibuat untuk menggunakan TFMA, tetapi versi terbaru TFMA mendukung beberapa tipe model tergantung pada kebutuhan pengguna. Menyiapkan EvalSavedModel seharusnya hanya diperlukan jika model berbasis tf.estimator digunakan dan metrik waktu pelatihan khusus diperlukan.

Perhatikan bahwa karena TFMA sekarang berjalan berdasarkan model penyajian, TFMA tidak lagi secara otomatis mengevaluasi metrik yang ditambahkan pada waktu pelatihan. Pengecualian untuk kasus ini adalah jika model keras digunakan karena keras menyimpan metrik yang digunakan bersama model yang disimpan. Namun, jika ini merupakan persyaratan yang sulit, TFMA terbaru kompatibel dengan versi sebelumnya sehingga EvalSavedModel masih dapat dijalankan di pipeline TFMA.

Tabel berikut merangkum model yang didukung secara default:

Tipe model Metrik Waktu Pelatihan Metrik Pasca Pelatihan
TF2 (keras) Y * Y
TF2 (generik) T / A Y
EvalSavedModel (penduga) Y Y
Tidak ada (pd.DataFrame, dll) T / A Y
  • Metrik Waktu Pelatihan mengacu pada metrik yang ditentukan pada waktu pelatihan dan disimpan dengan model (baik TFMA EvalSavedModel atau model yang disimpan keras). Metrik pasca pelatihan mengacu pada metrik yang ditambahkan melalui tfma.MetricConfig .
  • Model TF2 generik adalah model kustom yang mengekspor tanda tangan yang dapat digunakan untuk inferensi dan tidak didasarkan pada keras atau estimator.

Lihat FAQ untuk informasi lebih lanjut tentang cara mengatur dan mengkonfigurasi jenis model yang berbeda ini.

Mendirikan

Sebelum menjalankan evaluasi, diperlukan sedikit penyiapan. Pertama, objek tfma.EvalConfig harus ditentukan yang memberikan spesifikasi untuk model, metrik, dan irisan yang akan dievaluasi. Kedua, tfma.EvalSharedModel perlu dibuat yang mengarah ke model aktual (atau model) yang akan digunakan selama evaluasi. Setelah ini telah ditentukan, evaluasi dilakukan dengan memanggil tfma.run_model_analysis dengan dataset yang sesuai. Untuk lebih jelasnya, lihat panduan setup .

Jika dijalankan dalam pipa TFX, lihat panduan TFX tentang cara mengkonfigurasi TFMA untuk dijalankan sebagai komponen TFX Evaluator .

Contoh

Evaluasi Model Tunggal

Berikut ini menggunakan tfma.run_model_analysis untuk melakukan evaluasi pada model penayangan. Untuk penjelasan tentang berbagai pengaturan yang diperlukan, lihat panduan penyiapan .

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

Untuk evaluasi terdistribusi, buat pipeline Apache Beam menggunakan runner terdistribusi. Di pipeline, gunakan tfma.ExtractEvaluateAndWriteResults untuk evaluasi dan untuk menulis hasilnya. Hasilnya dapat dimuat untuk visualisasi menggunakan tfma.load_eval_result .

Sebagai contoh:

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

Validasi Model

Untuk melakukan validasi model terhadap kandidat dan baseline, perbarui konfigurasi untuk menyertakan pengaturan ambang batas dan teruskan dua model ke tfma.run_model_analysis .

Sebagai contoh:

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

Visualisasi

Hasil evaluasi TFMA dapat divisualisasikan di notebook Jupyter menggunakan komponen frontend yang disertakan dalam TFMA. Sebagai contoh:

TFMA Slicing Metrics Browser .

Informasi Lebih Lanjut