ملخص
تحليل نموذج TensorFlow (TFMA) عبارة عن مكتبة لإجراء تقييم النموذج.
- لـ : مهندسي التعلم الآلي أو علماء البيانات
- من : يريد تحليل وفهم نماذج TensorFlow الخاصة به
- إنها : مكتبة مستقلة أو مكون من خط أنابيب TFX
- أن : تقييم النماذج على كميات كبيرة من البيانات بطريقة موزعة على نفس المقاييس المحددة في التدريب. تتم مقارنة هذه المقاييس عبر شرائح من البيانات، ويتم عرضها في دفاتر ملاحظات Jupyter أو Colab.
- على عكس : بعض أدوات الاستبطان النموذجي مثل Tensorboard التي تقدم الاستبطان النموذجي
تقوم TFMA بإجراء حساباتها بطريقة موزعة على كميات كبيرة من البيانات باستخدام Apache Beam . تصف الأقسام التالية كيفية إعداد مسار تقييم TFMA الأساسي. راجع البنية لمزيد من التفاصيل حول التنفيذ الأساسي.
إذا كنت ترغب فقط في البدء والبدء، فاطلع على دفتر ملاحظات colab الخاص بنا.
يمكن أيضًا عرض هذه الصفحة من Tensorflow.org .
أنواع النماذج المدعومة
تم تصميم TFMA لدعم النماذج المستندة إلى Tensorflow، ولكن يمكن توسيعها بسهولة لدعم أطر العمل الأخرى أيضًا. تاريخيًا، تطلب TFMA إنشاء EvalSavedModel
لاستخدام TFMA، لكن الإصدار الأحدث من TFMA يدعم أنواعًا متعددة من النماذج وفقًا لاحتياجات المستخدم. يجب أن يكون إعداد EvalSavedModel مطلوبًا فقط في حالة استخدام نموذج قائم على tf.estimator
وكانت مقاييس وقت التدريب المخصصة مطلوبة.
لاحظ أنه نظرًا لأن TFMA يعمل الآن استنادًا إلى نموذج العرض، فلن يقوم TFMA تلقائيًا بتقييم المقاييس المضافة في وقت التدريب. الاستثناء لهذه الحالة هو إذا تم استخدام نموذج keras حيث أن keras يحفظ المقاييس المستخدمة بجانب النموذج المحفوظ. ومع ذلك، إذا كان هذا مطلبًا صعبًا، فإن أحدث TFMA يكون متوافقًا مع الإصدارات السابقة بحيث لا يزال من الممكن تشغيل EvalSavedModel
في خط أنابيب TFMA.
يلخص الجدول التالي النماذج المدعومة افتراضيًا:
نوع النموذج | مقاييس وقت التدريب | مقاييس ما بعد التدريب |
---|---|---|
TF2 (كيراس) | ص* | ي |
TF2 (عام) | لا يوجد | ي |
نموذج EvalSaved (مقدر) | ي | ي |
لا شيء (pd.DataFrame، الخ) | لا يوجد | ي |
- تشير مقاييس وقت التدريب إلى المقاييس المحددة في وقت التدريب والمحفوظة مع النموذج (إما TFMA EvalSavedModel أو نموذج keras المحفوظ). تشير مقاييس ما بعد التدريب إلى المقاييس المضافة عبر
tfma.MetricConfig
. - نماذج TF2 العامة هي نماذج مخصصة تقوم بتصدير التوقيعات التي يمكن استخدامها للاستدلال ولا تعتمد على keras أو المقدر.
راجع الأسئلة الشائعة لمزيد من المعلومات حول كيفية إعداد وتكوين أنواع النماذج المختلفة هذه.
يثبت
قبل إجراء التقييم، يلزم إجراء قدر صغير من الإعداد. أولاً، يجب تحديد كائن tfma.EvalConfig
الذي يوفر مواصفات النموذج والمقاييس والشرائح التي سيتم تقييمها. ثانيًا، يجب إنشاء tfma.EvalSharedModel
الذي يشير إلى النموذج (أو النماذج) الفعلي الذي سيتم استخدامه أثناء التقييم. بمجرد تحديد هذه العناصر، يتم إجراء التقييم عن طريق استدعاء tfma.run_model_analysis
باستخدام مجموعة البيانات المناسبة. لمزيد من التفاصيل، راجع دليل الإعداد .
في حالة التشغيل ضمن خط أنابيب TFX، راجع دليل TFX لمعرفة كيفية تكوين TFMA للتشغيل كمكون مقيم TFX.
أمثلة
تقييم النموذج الفردي
يستخدم ما يلي tfma.run_model_analysis
لإجراء التقييم على نموذج العرض. للحصول على شرح للإعدادات المختلفة المطلوبة، راجع دليل الإعداد .
# 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)
بالنسبة للتقييم الموزع، قم بإنشاء خط أنابيب Apache Beam باستخدام مشغل موزع. في المسار، استخدم tfma.ExtractEvaluateAndWriteResults
للتقييم ولكتابة النتائج. يمكن تحميل النتائج للتصور باستخدام tfma.load_eval_result
.
على سبيل المثال:
# 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)
التحقق من صحة النموذج
لإجراء التحقق من صحة النموذج مقابل المرشح وخط الأساس، قم بتحديث التكوين ليشمل إعداد الحد وتمرير نموذجين إلى tfma.run_model_analysis
.
على سبيل المثال:
# 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)
التصور
يمكن تصور نتائج تقييم TFMA في دفتر ملاحظات Jupyter باستخدام مكونات الواجهة الأمامية المضمنة في TFMA. على سبيل المثال:
.