Genel Bakış
TensorFlow Model Analizi (TFMA), model değerlendirmesi gerçekleştirmek için bir kitaplıktır.
- İçin : Makine Öğrenimi Mühendisleri veya Veri Bilimcileri
- kim : TensorFlow modellerini analiz etmek ve anlamak isteyen
- bu : bağımsız bir kitaplık veya bir TFX işlem hattının bileşeni
- Bu : modelleri, eğitimde tanımlanan aynı metriklere göre dağıtılmış bir şekilde büyük miktarda veriye dayalı olarak değerlendirir. Bu ölçümler, veri dilimlerinde karşılaştırılır ve Jupyter veya Colab not defterlerinde görselleştirilir.
- aksine : model iç gözlem sunan tensorboard gibi bazı iç gözlem araçları
TFMA, Apache Beam kullanarak hesaplamalarını büyük miktarda veri üzerinden dağıtılmış bir şekilde gerçekleştirir. Aşağıdaki bölümler, temel bir TFMA değerlendirme kanalının nasıl kurulacağını açıklamaktadır. Bkz mimari yatan uygulanmasına ilişkin daha fazla ayrıntı.
Sadece atlamak ve başlamak istiyorsanız, colab defterimize bakın.
Bu sayfa ayrıca tensorflow.org adresinden de 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. Geçmişte, 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 çok model türünü destekliyordu. Bir EvalSavedModel'in ayarlanması yalnızca tf.estimator
tabanlı bir model kullanılıyorsa ve özel eğitim süresi metrikleri gerekliyse gerekli olmalıdır.
TFMA artık sunum modeline göre çalıştığından, TFMA artık eğitim zamanında eklenen metrikleri otomatik olarak değerlendirmeyecektir. Bu durumun istisnası, bir keras modelinin kullanılmasıdır, çünkü keras, kaydedilen modelle birlikte kullanılan ölçümleri kaydetmektedir. Ancak, bu zor bir gereksinimse, en son TFMA geriye dönük olarak uyumludur, öyle ki bir EvalSavedModel
hala bir TFMA ardışık düzeninde ç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ı Metrikler |
---|---|---|
TF2 (keras) | Y * | Y |
TF2 (genel) | Yok | Y |
EvalSavedModel (tahminci) | Y | Y |
Yok (pd.DataFrame, vb.) | Yok | Y |
- Eğitim Süresi ölçümleri, eğitim zamanında tanımlanan ve modelle kaydedilen (TFMA EvalSavedModel veya keras kaydedilen model) ölçümleri ifade eder. Eğitim sonrası ölçümler,
tfma.MetricConfig
aracılığıyla eklenen ölçümleri ifade eder. - Genel TF2 modelleri, çıkarım için kullanılabilen imzaları dışa aktaran ve ne keras ne de tahmin ediciye dayalı olmayan özel modellerdir.
Bu farklı model türlerinin nasıl kurulup 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, ölçümler ve dilimler için özellikler 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şturulması gerekir. Bunlar tanımlandıktan sonra, değerlendirme, uygun bir veri tfma.run_model_analysis
çağırarak gerçekleştirilir. Daha fazla ayrıntı için kurulum kılavuzuna bakın.
Bir TFX işlem hattı içinde çalışıyorsa, TFMA'nın bir TFX Değerlendiricisi bileşeni olarak çalışacak şekilde nasıl yapılandırılacağını öğrenmek için TFX kılavuzuna bakın.
Örnekler
Tek Model Değerlendirmesi
Aşağıda, bir sunum modelinde değerlendirme yapmak için tfma.run_model_analysis
kullanılmaktadı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 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)
Dağıtılmış değerlendirme için, dağıtılmış bir çalıştırıcı kullanarak bir Apache Beam ardışık düzeni oluşturun. tfma.ExtractEvaluateAndWriteResults
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 tfma.load_eval_result
.
Ö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 temele göre model doğrulaması gerçekleştirmek için yapılandırmayı bir eşik ayarı içerecek şekilde 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 dizüstü bilgisayarda görselleştirilebilir. Örneğin:
.