TensorFlow Model Analizine Başlarken

genel bakış

TensorFlow Model Analysis (TFMA), model değerlendirmesi gerçekleştirmek için bir kütüphanedir.

  • Şunlar için : Makine Öğrenimi Mühendisleri veya Veri Bilimcileri
  • kim : TensorFlow modellerini analiz etmek ve anlamak istiyor
  • bu : bağımsız bir kitaplık veya bir TFX işlem hattının bileşeni
  • that : eğitimde tanımlanan aynı metriklerde dağıtılmış bir şekilde büyük miktarda veri üzerindeki modelleri değerlendirir. Bu ölçümler, veri dilimleri üzerinden karşılaştırılır ve Jupyter veya Colab not defterlerinde görselleştirilir.
  • aksine : tensorboard gibi model iç gözlemi sunan bazı model iç gözlem araçları

TFMA, hesaplamalarını Apache Beam kullanarak büyük miktarda veri üzerinde dağıtılmış bir şekilde gerçekleştirir. Aşağıdaki bölümlerde, temel bir TFMA değerlendirme hattının nasıl kurulacağı açıklanmaktadır. Temel uygulama hakkında mimariye ilişkin daha fazla ayrıntıya bakın.

Sadece atlamak ve başlamak istiyorsanız, ortak çalışma defterimize göz atın .

Bu sayfa tensorflow.org'dan da görüntülenebilir.

Desteklenen Model Türleri

TFMA, tensorflow tabanlı modelleri desteklemek için tasarlanmıştır, ancak diğer çerçeveleri de desteklemek için kolayca genişletilebilir. Tarihsel olarak, TFMA, TFMA'yı kullanmak için bir EvalSavedModel oluşturulmasını gerektiriyordu, ancak TFMA'nın en son sürümü, kullanıcının ihtiyaçlarına bağlı olarak birden fazla model türünü destekliyor. Bir EvalSavedModel kurulumu , yalnızca tf.estimator tabanlı bir model kullanılıyorsa ve özel eğitim süresi metrikleri gerekiyorsa gerekli olmalıdır.

TFMA artık sunum modeline göre çalıştığından, TFMA'nın eğitim zamanında eklenen metrikleri artık otomatik olarak değerlendirmeyeceğini unutmayın. Bu durumun istisnası, bir keras modelinin kullanılmasıdır, çünkü keras kaydedilen modelle birlikte kullanılan metrikleri kaydeder. Ancak, bu zor bir gereklilikse, en son TFMA geriye dönük olarak uyumludur, öyle ki bir EvalSavedModel hala bir TFMA boru hattında çalıştırılabilir.

Aşağıdaki tablo, varsayılan olarak desteklenen modelleri özetlemektedir:

Model türü Eğitim Süresi Metrikleri Eğitim Sonrası Metrikleri
TF2 (keralar) E* Y
TF2 (genel) Yok Y
EvalSavedModel (tahmin edici) Y Y
Yok (pd.DataFrame, vb.) Yok Y
  • Eğitim Süresi metrikleri, eğitim zamanında tanımlanan ve modelle (TFMA EvalSavedModel veya keras kaydedilmiş model) kaydedilen metrikleri ifade eder. Eğitim sonrası metrikler, tfma.MetricConfig aracılığıyla eklenen metrikleri ifade eder.
  • Genel TF2 modelleri, çıkarım için kullanılabilen ve kera veya tahmin ediciye dayalı olmayan imzaları dışa aktaran özel modellerdir.

Bu farklı model türlerinin nasıl kurulacağı ve yapılandırılacağı hakkında daha fazla bilgi için SSS bölümüne bakın.

Kurmak

Bir değerlendirmeyi çalıştırmadan önce, az miktarda kurulum gereklidir. İlk olarak, değerlendirilecek model, metrikler ve dilimler için belirtimler sağlayan bir tfma.EvalConfig nesnesi tanımlanmalıdır. İkinci olarak, değerlendirme sırasında kullanılacak gerçek modele (veya modellere) işaret eden bir tfma.EvalSharedModel oluşturulmalıdır. Bunlar tanımlandıktan sonra uygun bir veri seti ile tfma.run_model_analysis çağrılarak değerlendirme yapılır. Daha fazla ayrıntı için kurulum kılavuzuna bakın.

Bir TFX ardışık düzeni içinde çalışıyorsanız, TFMA'nın bir TFX Değerlendirici bileşeni olarak çalışacak şekilde nasıl yapılandırılacağına ilişkin TFX kılavuzuna bakın.

Örnekler

Tek Model Değerlendirmesi

Aşağıda, bir sunum modelinde değerlendirme gerçekleştirmek için tfma.run_model_analysis kullanılır. Gereken farklı ayarların açıklaması için kurulum kılavuzuna bakı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)

Dağıtılmış değerlendirme için, dağıtılmış bir koşucu kullanarak bir Apache Beam ardışık düzeni oluşturun. İşlem hattında, değerlendirme ve sonuçları yazmak için tfma.ExtractEvaluateAndWriteResults kullanın. Sonuçlar, tfma.load_eval_result kullanılarak görselleştirme için yüklenebilir.

Örneğin:

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

Model geçerliliği

Bir aday ve taban çizgisine göre model doğrulaması gerçekleştirmek için, bir eşik ayarı içerecek şekilde yapılandırmayı güncelleyin ve iki modeli tfma.run_model_analysis .

Örneğin:

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

görselleştirme

TFMA değerlendirme sonuçları, TFMA'da bulunan ön uç bileşenleri kullanılarak bir Jupyter not defterinde görselleştirilebilir. Örneğin:

TFMA Dilimleme Metrikleri Tarayıcısı .

Daha fazla bilgi