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:
.