ملخص
تم توضيح خط أنابيب تحليل نموذج TensorFlow (TFMA) على النحو التالي:
يتكون خط الأنابيب من أربعة مكونات رئيسية:
- قراءة المدخلات
- اِستِخلاص
- تقييم
- اكتب النتائج
تستخدم هذه المكونات نوعين أساسيين: tfma.Extracts
و tfma.evaluators.Evaluation
. يمثل النوع tfma.Extracts
البيانات المستخرجة أثناء معالجة خط الأنابيب وقد تتوافق مع مثال واحد أو أكثر للنموذج. tfma.evaluators.Evaluation
يمثل التقييم الناتج من تقييم المقتطفات في نقاط مختلفة أثناء عملية الاستخراج. من أجل توفير واجهة برمجة تطبيقات مرنة ، فإن هذه الأنواع هي مجرد إرشادات حيث يتم تحديد المفاتيح (محجوزة للاستخدام) بواسطة تطبيقات مختلفة. يتم تعريف الأنواع على النحو التالي:
# Extracts represent data extracted during pipeline processing.
# For example, the PredictExtractor stores the data for the
# features, labels, and predictions under the keys "features",
# "labels", and "predictions".
Extracts = Dict[Text, Any]
# Evaluation represents the output from evaluating extracts at
# particular point in the pipeline. The evaluation outputs are
# keyed by their associated output type. For example, the metric / plot
# dictionaries from evaluating metrics and plots will be stored under
# "metrics" and "plots" respectively.
Evaluation = Dict[Text, beam.pvalue.PCollection]
لاحظ أن tfma.Extracts
لا يتم كتابته أبدًا بشكل مباشر ، يجب دائمًا المرور من خلال مقيِّم لإنتاج tfma.evaluators.Evaluation
. التقييم الذي يتم كتابته بعد ذلك. لاحظ أيضًا أن tfma.Extracts
هي إملاءات يتم تخزينها في حزمة beam.pvalue.PCollection
(على سبيل المثال ، شعاع. beam.PTransform
s يأخذ beam.pvalue.PCollection[tfma.Extracts]
إدخال. tfma.evaluators.Evaluation
. هي beam.pvalue.PCollection
s (على سبيل المثال ، الشعاع ، beam.PTransform
s يأخذ الأمر نفسه كحجة beam.value.PCollection
. القيمة. مدخلات المجموعة). بمعنى آخر tfma.evaluators.Evaluation
يتم استخدام التقييم في وقت إنشاء خط الأنابيب ، ولكن tfma.Extracts
يتم استخدام المستخلصات في وقت تشغيل خط الأنابيب.
قراءة المدخلات
تتكون مرحلة ReadInputs
من تحويل يأخذ المدخلات الأولية (tf.train.Example ، CSV ، ...) ويحولها إلى مقتطفات. يتم تمثيل المقتطفات اليوم على أنها بايتات إدخال خام مخزنة في tfma.INPUT_KEY
، ومع ذلك يمكن أن تكون المقتطفات بأي شكل متوافق مع خط أنابيب الاستخراج - مما يعني أنه ينشئ tfma.Extracts
. النازعون. الأمر متروك للمستخلصين المختلفين لتوثيق ما يحتاجون إليه بوضوح.
اِستِخلاص
عملية الاستخراج عبارة عن قائمة بالأشعة ، beam.PTransform
يتم تشغيلها في سلسلة. تأخذ tfma.Extracts
كمدخلات وإرجاع tfma.Extracts
كمخرجات. المستخرج النموذجي الأولي هو tfma.extractors.PredictExtractor
الذي يستخدم مستخلص الإدخال الناتج عن تحويل مدخلات القراءة وتشغيله من خلال نموذج لإنتاج مقتطفات التنبؤ. يمكن إدخال المستخرجات المخصصة في أي وقت بشرط أن تتوافق تحويلاتها مع tfma.Extracts
in و tfma.Extracts
out API. يتم تعريف المستخرج على النحو التالي:
# An Extractor is a PTransform that takes Extracts as input and returns
# Extracts as output. A typical example is a PredictExtractor that receives
# an 'input' placeholder for input and adds additional 'predictions' extracts.
Extractor = NamedTuple('Extractor', [
('stage_name', Text),
('ptransform', beam.PTransform)]) # Extracts -> Extracts
InputExtractor
يتم استخدام tfma.extractors.InputExtractor
لاستخراج الميزات الأولية والتسميات الأولية وأوزان الأمثلة الأولية من tf.train.Example
، مثال على السجلات لاستخدامها في تقسيم المقاييس والحسابات. بشكل افتراضي ، يتم تخزين القيم ضمن features
مفاتيح الاستخراج ، labels
، و example_weights
على التوالي. يتم تخزين تسميات نموذج الإخراج الفردي وأوزان الأمثلة مباشرة np.ndarray
. يتم تخزين تسميات النماذج متعددة المخرجات وأوزان الأمثلة np.ndarray
لقيم np.ndarray (يتم تمييزها بواسطة اسم الإخراج). إذا تم إجراء تقييم متعدد النماذج ، فسيتم تضمين الملصقات وأمثلة الأوزان بشكل أكبر في ديكت آخر (مرتبط باسم النموذج).
توقع Extractor
يقوم tfma.extractors.PredictExtractor
بتشغيل تنبؤات النموذج وتخزينها تحت predictions
الرئيسية في tfma.Extracts
. يتم تخزين تنبؤات نموذج الإخراج الفردي مباشرة كقيم الإخراج المتوقعة. يتم تخزين تنبؤات النماذج متعددة المخرجات كإملاء لقيم المخرجات (يتم تمييزها بواسطة اسم الإخراج). إذا تم إجراء تقييم متعدد النماذج ، فسيتم تضمين التنبؤ بشكل أكبر في ديكت آخر (مرتبط باسم النموذج). تعتمد قيمة المخرجات الفعلية المستخدمة على النموذج (على سبيل المثال ، مخرجات إرجاع مقدر TF في شكل ديكت بينما ترجع np.ndarray
قيم np.ndarray).
SliceKeyExtractor
يستخدم tfma.extractors.SliceKeyExtractor
مواصفات التقطيع لتحديد الشرائح التي تنطبق على كل مثال من المدخلات بناءً على الميزات المستخرجة ويضيف قيم التقطيع المقابلة إلى المقتطفات لاستخدامها لاحقًا من قبل المقيمين.
تقييم
التقييم هو عملية أخذ مقتطف وتقييمه. في حين أنه من الشائع إجراء التقييم في نهاية خط أنابيب الاستخراج ، إلا أن هناك حالات استخدام تتطلب التقييم في وقت مبكر من عملية الاستخراج. على هذا النحو ، يرتبط المقيِّمون بالمستخرجين الذين يجب تقييم مخرجاتهم على أساسها. يتم تعريف المقيم على النحو التالي:
# An evaluator is a PTransform that takes Extracts as input and
# produces an Evaluation as output. A typical example of an evaluator
# is the MetricsAndPlotsEvaluator that takes the 'features', 'labels',
# and 'predictions' extracts from the PredictExtractor and evaluates
# them using post export metrics to produce metrics and plots dictionaries.
Evaluator = NamedTuple('Evaluator', [
('stage_name', Text),
('run_after', Text), # Extractor.stage_name
('ptransform', beam.PTransform)]) # Extracts -> Evaluation
لاحظ أن المقيم عبارة عن حزمة. tfma.Extracts
beam.PTransform
. لا يوجد ما يمنع التنفيذ من إجراء تحولات إضافية على المقتطفات كجزء من عملية التقييم. على عكس المستخرجات التي يجب أن تعيد tfma.Extracts
. مقتطفات ديكت ، لا توجد قيود على أنواع المخرجات التي يمكن للمقيم أن ينتجها على الرغم من أن معظم المقيّمين يعودون أيضًا ديكت (على سبيل المثال ، أسماء المقاييس والقيم).
MetricsAndPlotsEvaluator
يأخذ tfma.evaluators.MetricsAndPlotsEvaluator
features
labels
predictions
كمدخلات ، ويقوم بتشغيلها من خلال tfma.slicer.FanoutSlices
حسب الشرائح ، ثم إجراء القياسات وحسابات المؤامرات. ينتج مخرجات في شكل قواميس للمقاييس ومفاتيح وقيم المؤامرات (يتم تحويلها لاحقًا إلى بروتو متسلسلة للإخراج بواسطة tfma.writers.MetricsAndPlotsWriter
).
اكتب النتائج
مرحلة WriteResults
هي المكان الذي تتم فيه كتابة مخرجات التقييم على القرص. يستخدم WriteResults الكتاب لكتابة البيانات بناءً على مفاتيح الإخراج. على سبيل المثال ، tfma.evaluators.Evaluation
قد يحتوي التقييم على مفاتيح metrics
plots
. سيتم ربط هذه بعد ذلك بالمقاييس وقواميس الرسوم المسماة "المقاييس" و "المؤامرات". يحدد الكتاب كيفية كتابة كل ملف:
# A writer is a PTransform that takes evaluation output as input and
# serializes the associated PCollections of data to a sink.
Writer = NamedTuple('Writer', [
('stage_name', Text),
('ptransform', beam.PTransform)]) # Evaluation -> PDone
MetricsAndPlotsWriter
نحن نقدم tfma.writers.MetricsAndPlotsWriter
الذي يحول المقاييس والقواميس المؤامرة إلى بروتوكولات متسلسلة ويكتبها على قرص.
إذا كنت ترغب في استخدام تنسيق تسلسل مختلف ، فيمكنك إنشاء كاتب مخصص واستخدامه بدلاً من ذلك. نظرًا لأن tfma.evaluators.Evaluation
. التقييم الذي تم تمريره إلى الكتاب يحتوي على مخرجات جميع المقيمين مجتمعين ، يتم توفير تحويل مساعد الكتابة الذي يمكن للكتاب استخدامه في ptransform
tfma.writers.Write
بهم لتحديد beam.PCollection
المناسبة. مفتاح الإخراج (انظر أدناه للحصول على مثال).
التخصيص
تأخذ طريقة tfma.run_model_analysis
extractors
evaluators
writers
لتخصيص المستخرجين والمقيّمين والكتاب الذين يستخدمهم خط الأنابيب. إذا لم يتم توفير وسيطات ، فسيتم استخدام tfma.default_extractors
و tfma.default_evaluators
و tfma.default_writers
بشكل افتراضي.
النازعون المخصصون
لإنشاء مستخرج مخصص ، قم بإنشاء tfma.extractors.Extractor
type الذي يلف شعاعًا. قم tfma.Extracts
beam.PTransform
وإرجاع tfma.Extracts
كإخراج. أمثلة من المستخلصات متاحة تحت tfma.extractors
.
مقيمون مخصصون
لإنشاء مقيِّم مخصص ، قم بإنشاء نوع tfma.evaluators.Evaluator
الذي يلتف على الحزمة. قم tfma.Extracts
beam.PTransform
وإرجاع tfma.evaluators.Evaluation
كإخراج. قد يأخذ المقيِّم الأساسي فقط tfma الوارد ، tfma.Extracts
لتخزينها في جدول. هذا هو بالضبط ما يفعله tfma.evaluators.AnalysisTableEvaluator
. قد يقوم مقيِّم أكثر تعقيدًا بإجراء معالجة إضافية وتجميع البيانات. انظر tfma.evaluators.MetricsAndPlotsEvaluator
كمثال.
لاحظ أنه يمكن تخصيص tfma.evaluators.MetricsAndPlotsEvaluator
نفسه لدعم المقاييس المخصصة (انظر المقاييس لمزيد من التفاصيل).
كتاب مخصص
لإنشاء كاتب مخصص ، قم بإنشاء نوع tfma.writers.Writer
الذي يلف beam.PTransform
. قم بتحويل مع الأخذ tfma.evaluators.Evaluation
كمدخلات وعودة beam.pvalue.PDone
. فيما يلي مثال أساسي للكاتب لكتابة سجلات TFR التي تحتوي على مقاييس:
tfma.writers.Writer(
stage_name='WriteTFRecord(%s)' % tfma.METRICS_KEY,
ptransform=tfma.writers.Write(
key=tfma.METRICS_KEY,
ptransform=beam.io.WriteToTFRecord(file_path_prefix=output_file))
تعتمد مدخلات الكاتب على مخرجات المقيم المرتبط. بالنسبة للمثال أعلاه ، يكون الإخراج عبارة عن بروتو متسلسل تم إنتاجه بواسطة tfma.evaluators.MetricsAndPlotsEvaluator
. كاتب في tfma.evaluators.AnalysisTableEvaluator
سيكون مسؤولاً عن كتابة الحزمة. tfma.Extracts
beam.pvalue.PCollection
لاحظ أن الكاتب مرتبط بإخراج المقيم عبر مفتاح الإخراج المستخدم (مثل tfma.METRICS_KEY
، tfma.ANALYSIS_KEY
، إلخ).
مثال خطوة بخطوة
فيما يلي مثال على الخطوات المتبعة في خط أنابيب الاستخراج والتقييم عند استخدام كل من tfma.evaluators.MetricsAndPlotsEvaluator
و tfma.evaluators.AnalysisTableEvaluator
:
run_model_analysis(
...
extractors=[
tfma.extractors.InputExtractor(...),
tfma.extractors.PredictExtractor(...),
tfma.extractors.SliceKeyExtrator(...)
],
evaluators=[
tfma.evaluators.MetricsAndPlotsEvaluator(...),
tfma.evaluators.AnalysisTableEvaluator(...)
])
ReadInputs
# Out
Extracts {
'input': bytes # CSV, Proto, ...
}
ExtractAndEvaluate
# In: ReadInputs Extracts
# Out:
Extracts {
'input': bytes # CSV, Proto, ...
'features': tensor_like # Raw features
'labels': tensor_like # Labels
'example_weights': tensor_like # Example weights
}
# In: InputExtractor Extracts
# Out:
Extracts {
'input': bytes # CSV, Proto, ...
'features': tensor_like # Raw features
'labels': tensor_like # Labels
'example_weights': tensor_like # Example weights
'predictions': tensor_like # Predictions
}
# In: PredictExtractor Extracts
# Out:
Extracts {
'features': tensor_like # Raw features
'labels': tensor_like # Labels
'example_weights': tensor_like # Example weights
'predictions': tensor_like # Predictions
'slice_key': Tuple[bytes...] # Slice
}
-
tfma.evaluators.MetricsAndPlotsEvaluator
(run_after:SLICE_KEY_EXTRACTOR_STAGE_NAME
)
# In: SliceKeyExtractor Extracts
# Out:
Evaluation {
'metrics': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from metric key to metric values)
'plots': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from plot key to plot values)
}
-
tfma.evaluators.AnalysisTableEvaluator
(run_after:LAST_EXTRACTOR_STAGE_NAME
)
# In: SliceKeyExtractor Extracts
# Out:
Evaluation {
'analysis': PCollection[Extracts] # Final Extracts
}
WriteResults
# In:
Evaluation {
'metrics': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from metric key to metric values)
'plots': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from plot key to plot values)
'analysis': PCollection[Extracts] # Final Extracts
}
# Out: metrics, plots, and analysis files