Memulai Analisis Model TensorFlow

Ringkasan

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

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

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

Jika Anda hanya ingin terjun dan memulai, lihat notebook 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 memerlukan EvalSavedModel dibuat untuk menggunakan TFMA, tetapi versi terbaru TFMA mendukung beberapa jenis 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 penayangan, TFMA tidak akan 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 dalam saluran TFMA.

Tabel berikut merangkum model yang didukung secara default:

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

Lihat FAQ untuk informasi lebih lanjut tentang cara mengatur dan mengonfigurasi tipe model yang berbeda ini.

Mempersiapkan

Sebelum menjalankan evaluasi, diperlukan sedikit pengaturan. Pertama, objek tfma.EvalConfig harus didefinisikan yang menyediakan spesifikasi untuk model, metrik, dan irisan yang akan dievaluasi. Kedua, tfma.EvalSharedModel perlu dibuat yang menunjuk ke model aktual (atau model) yang akan digunakan selama evaluasi. Setelah ini telah didefinisikan, evaluasi dilakukan dengan memanggil tfma.run_model_analysis dengan dataset yang sesuai. Untuk detail selengkapnya, lihat panduan penyiapan .

Jika berjalan di dalam pipeline TFX, lihat panduan TFX tentang cara mengonfigurasi TFMA agar berjalan sebagai komponen TFX Evaluator .

Contoh

Evaluasi Model Tunggal

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

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

Untuk evaluasi terdistribusi, buat pipeline Apache Beam menggunakan runner terdistribusi. Dalam pipeline, gunakan tfma.ExtractEvaluateAndWriteResults untuk evaluasi dan untuk menuliskan 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:

Peramban Metrik Pengiris TFMA .

Informasi Lebih Lanjut