هندسة تحليل نموذج Tensorflow

ملخص

تم توضيح خط أنابيب تحليل نموذج TensorFlow (TFMA) على النحو التالي:

خط أنابيب 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
}
# 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)
}
# 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