ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

مكون خط أنابيب ExampleGen TFX

يستوعب مكون خط أنابيب ExampleGen TFX البيانات في خطوط أنابيب TFX. يستهلك الملفات / الخدمات الخارجية لإنشاء أمثلة ستقرأها مكونات TFX الأخرى. كما يوفر أيضًا قسمًا متسقًا وقابلًا للتكوين ، ويقوم بترتيب مجموعة البيانات للحصول على أفضل ممارسات تعلم الآلة.

  • يستهلك: البيانات من مصادر البيانات الخارجية مثل CSV و TFRecord و Avro و Parquet و BigQuery.
  • tf.Example : سجلات tf.Example ، سجلات tf.SequenceExample ، أو تنسيق tf.SequenceExample ، اعتمادًا على تنسيق الحمولة النافعة.

exampleGen والمكونات الأخرى

يوفر موقع ExampleGen بيانات للمكونات التي تستخدم مكتبة التحقق من صحة بيانات TensorFlow ، مثل SchemaGen و StatisticsGen و Example Validator . كما يوفر البيانات إلى Transform ، والتي تستخدم مكتبة TensorFlow Transform ، وفي النهاية لنشر الأهداف أثناء الاستدلال.

مصادر البيانات وتنسيقاتها

يتضمن التثبيت القياسي لـ TFX حاليًا مكونات ExampleGen الكاملة لمصادر وتنسيقات البيانات هذه:

المنفذون المخصصون متاحون أيضًا والتي تمكن من تطوير مكونات ExampleGen لمصادر وتنسيقات البيانات هذه:

راجع أمثلة الاستخدام في التعليمات البرمجية المصدر وهذه المناقشة لمزيد من المعلومات حول كيفية استخدام وتطوير المنفذين المخصصين.

بالإضافة إلى ذلك ، تتوفر مصادر البيانات والتنسيقات هذه كأمثلة للمكونات المخصصة :

استيعاب تنسيقات البيانات التي يدعمها Apache Beam

يدعم Apache Beam استيعاب البيانات من مجموعة واسعة من مصادر البيانات وتنسيقاتها ( انظر أدناه ). يمكن استخدام هذه القدرات لإنشاء مكونات ExampleGen المخصصة لـ TFX ، والتي يتم توضيحها بواسطة بعض مكونات ExampleGen الحالية ( انظر أدناه ).

كيفية استخدام مكون ExampleGen

بالنسبة لمصادر البيانات المدعومة (حاليًا ، ملفات CSV ، ملفات TFRecord ذات tf.Example tf.SequenceExample و tf.SequenceExample و proto ونتائج استعلامات BigQuery) يمكن استخدام مكون خط أنابيب ExampleGen مباشرةً في النشر ويتطلب القليل من التخصيص. فمثلا:

from tfx.utils.dsl_utils import csv_input
from tfx.components.example_gen.csv_example_gen.component import CsvExampleGen

examples = csv_input(os.path.join(base_dir, 'data/simple'))
example_gen = CsvExampleGen(input=examples)

أو ما شابه أدناه لاستيراد سجل TFRecord خارجي مع tf.Example مباشرة:

09 بديع 270

سبان ، الإصدار والانقسام

سبان هو مجموعة من أمثلة التدريب. إذا استمرت بياناتك في نظام ملفات ، فقد يتم تخزين كل Span في دليل منفصل. لا يتم ترميز دلالات النطاق في TFX ؛ قد يتوافق النطاق مع يوم من البيانات أو ساعة من البيانات أو أي مجموعة أخرى ذات معنى لمهمتك.

يمكن أن يحتوي كل نطاق على إصدارات متعددة من البيانات. لإعطاء مثال ، إذا قمت بإزالة بعض الأمثلة من Span لتنظيف البيانات ذات الجودة الرديئة ، فقد ينتج عن ذلك إصدار جديد من ذلك النطاق. بشكل افتراضي ، تعمل مكونات TFX على أحدث إصدار داخل نطاق.

يمكن أيضًا تقسيم كل إصدار داخل Span إلى أقسام متعددة. حالة الاستخدام الأكثر شيوعًا لتقسيم النطاق هي تقسيمه إلى بيانات تدريب وتقييم.

يمتد والانقسام

تقسيم الإدخال / الإخراج المخصص

لتخصيص قطار / نسبة الانقسام حدة التقييم الذي ExampleGen الناتج الإرادة، تعيين output_config لمكون ExampleGen. فمثلا:

from  tfx.proto import example_gen_pb2

# Input has a single split 'input_dir/*'.
# Output 2 splits: train:eval=3:1.
output = example_gen_pb2.Output(
             split_config=example_gen_pb2.SplitConfig(splits=[
                 example_gen_pb2.SplitConfig.Split(name='train', hash_buckets=3),
                 example_gen_pb2.SplitConfig.Split(name='eval', hash_buckets=1)
             ]))
examples = csv_input(input_dir)
example_gen = CsvExampleGen(input=examples, output_config=output)

لاحظ كيف تم تعيين hash_buckets في هذا المثال.

للحصول على مصدر الدخل التي لديها بالفعل الانقسام، تعيين input_config لمكون ExampleGen:

from  tfx.proto import example_gen_pb2

# Input train split is 'input_dir/train/*', eval split is 'input_dir/eval/*'.
# Output splits are generated one-to-one mapping from input splits.
input = example_gen_pb2.Input(splits=[
                example_gen_pb2.Input.Split(name='train', pattern='train/*'),
                example_gen_pb2.Input.Split(name='eval', pattern='eval/*')
            ])
examples = csv_input(input_dir)
example_gen = CsvExampleGen(input=examples, input_config=input)

بالنسبة للمثال المستند إلى الملف (مثل CsvExampleGen و ImportExampleGen) ، فإن pattern هو نمط ملف نسبي للكرة الأرضية يقوم بتعيين ملفات الإدخال مع الدليل الجذر المقدم من خلال مسار الإدخال الأساسي. بالنسبة إلى المثال المستند إلى طلب البحث (مثل BigQueryExampleGen و PrestoExampleGen) ، فإن pattern هو استعلام SQL.

بشكل افتراضي ، يتم التعامل مع dir قاعدة الإدخال بالكامل كتقسيم إدخال فردي ، ويتم إنشاء تقسيم إخراج القطار والتقييم بنسبة 2: 1.

يرجى الرجوع إلى proto / example_gen.proto للحصول على تكوين تقسيم المدخلات والمخرجات في ExampleGen. وارجع إلى دليل مكونات المصب لاستخدام التقسيمات المخصصة في اتجاه مجرى النهر.

طريقة التقسيم

عند استخدام طريقة تقسيم hash_buckets ، بدلاً من السجل بأكمله ، يمكن للمرء استخدام ميزة لتقسيم الأمثلة. في حالة وجود ميزة ، سيستخدم ExampleGen بصمة هذه الميزة كمفتاح القسم.

يمكن استخدام هذه الميزة للحفاظ على تقسيم ثابت لخصائص معينة من الأمثلة: على سبيل المثال ، سيتم وضع المستخدم دائمًا في نفس التقسيم إذا تم تحديد "user_id" كاسم ميزة القسم.

يعتمد تفسير ما تعنيه "الميزة" وكيفية مطابقة "الميزة" مع الاسم المحدد على تنفيذ ExampleGen ونوع الأمثلة.

لتطبيقات ExampleGen الجاهزة:

  • إذا قامت بإنشاء مثال tf ، فإن "الميزة" تعني إدخالًا في tf.Example.features.feature.
  • إذا قامت بإنشاء tf.SequenceExample ، فإن "الميزة" تعني إدخالًا في tf.SequenceExample.context.feature.
  • يتم دعم ميزات int64 و bytes فقط.

في الحالات التالية ، يعرض ExampleGen أخطاء وقت التشغيل:

  • اسم العنصر المحدد غير موجود في المثال.
  • ميزة فارغة: tf.train.Feature() .
  • أنواع الميزات غير المدعومة ، مثل الميزات العائمة.

لإخراج قطار / انقسام حدة التقييم على أساس الميزة في الأمثلة، تعيين output_config لمكون ExampleGen. فمثلا:

from  tfx.proto import example_gen_pb2

# Input has a single split 'input_dir/*'.
# Output 2 splits based on 'user_id' features: train:eval=3:1.
output = example_gen_pb2.Output(
             split_config=example_gen_pb2.SplitConfig(splits=[
                 example_gen_pb2.SplitConfig.Split(name='train', hash_buckets=3),
                 example_gen_pb2.SplitConfig.Split(name='eval', hash_buckets=1)
             ],
             partition_feature_name='user_id'))
examples = csv_input(input_dir)
example_gen = CsvExampleGen(input=examples, output_config=output)

لاحظ كيف تم تعيين partition_feature_name في هذا المثال.

امتداد

يمكن استرداد Span باستخدام مواصفات "{SPAN}" في نمط glob للإدخال :

  • تتطابق هذه المواصفات مع الأرقام وتعيين البيانات إلى أرقام SPAN ذات الصلة. على سبيل المثال ، ستجمع "data_ {SPAN} - *. tfrecord" ملفات مثل "data_12-a.tfrecord" و "date_12-b.tfrecord".
  • اختياريًا ، يمكن تحديد هذه المواصفات بعرض الأعداد الصحيحة عند التعيين. على سبيل المثال ، يتم تعيين "data_ {SPAN: 2} .file" إلى ملفات مثل "data_02.file" و "data_27.file" (كمدخلات لـ Span-2 و Span-27 على التوالي) ، ولكن لا يتم تعيينها إلى "data_1. ملف 'ولا' data_123.file '.
  • عندما تكون مواصفات SPAN مفقودة ، يُفترض أن تكون دائمًا Span '0'.
  • إذا تم تحديد SPAN ، فسيقوم خط الأنابيب بمعالجة أحدث امتداد ، وتخزين رقم الامتداد في البيانات الوصفية.

على سبيل المثال ، لنفترض أن هناك بيانات إدخال:

  • "/ tmp / span-1 / قطار / بيانات"
  • "/ tmp / span-1 / Eval / data"
  • "/ tmp / span-2 / قطار / بيانات"
  • "/ tmp / span-2 / Eval / data"

ويتم عرض تكوين الإدخال على النحو التالي:

splits {
  name: 'train'
  pattern: 'span-{SPAN}/train/*'
}
splits {
  name: 'eval'
  pattern: 'span-{SPAN}/eval/*'
}

عند تشغيل خط الأنابيب ، سيتم معالجة:

  • '/ tmp / span-2 / train / data' كتقسيم القطار
  • '/ tmp / span-2 / Eval / data' كتقسيم EVAL

برقم امتداد كـ "2". إذا كان "/ tmp / span-3 / ..." جاهزًا في وقت لاحق ، فما عليك سوى تشغيل خط الأنابيب مرة أخرى وسوف يلتقط الامتداد "3" للمعالجة. يظهر أدناه مثال الكود لاستخدام مواصفات النطاق:

from  tfx.proto import example_gen_pb2

input = example_gen_pb2.Input(splits=[
                example_gen_pb2.Input.Split(name='train',
                                            pattern='span-{SPAN}/train/*'),
                example_gen_pb2.Input.Split(name='eval',
                                            pattern='span-{SPAN}/eval/*')
            ])
examples = csv_input('/tmp')
example_gen = CsvExampleGen(input=examples, input_config=input)

يمكن استرداد فترة معينة باستخدام RangeConfig ، والذي تم تفصيله أدناه.

تاريخ

إذا تم تنظيم مصدر البيانات الخاص بك على نظام الملفات حسب التاريخ ، فإن TFX تدعم تعيين التواريخ مباشرة إلى أرقام الامتداد. هناك ثلاثة مواصفات لتمثيل التعيين من التواريخ إلى الفترات: {YYYY} و {MM} و {DD}:

  • يجب أن تكون المواصفات الثلاثة موجودة تمامًا في نمط glob للإدخال إذا تم تحديد أي منها:
  • يمكن تحديد إما مواصفات {SPAN} أو مجموعة مواصفات التاريخ هذه بشكل حصري.
  • يتم حساب تاريخ التقويم بالسنة بدءًا من YYYY والشهر بدءًا من MM ويوم الشهر بدءًا من DD ، ثم يتم حساب رقم الامتداد على أنه عدد الأيام منذ حقبة unix (أي 1970-01-01). على سبيل المثال ، يتطابق "log- {YYYY} {MM} {DD} .data" مع ملف "log-19700101.data" ويستهلكه كمدخل لـ Span-0 و "log-20170101.data" كمدخل لـ سبان 17167.
  • إذا تم تحديد هذه المجموعة من مواصفات التاريخ ، فسيقوم خط الأنابيب بمعالجة أحدث تاريخ ، وتخزين رقم الامتداد المقابل في البيانات الوصفية.

على سبيل المثال ، لنفترض أن هناك بيانات إدخال منظمة حسب تاريخ التقويم:

  • "/ tmp / 1970-01-02 / train / data"
  • "/ tmp / 1970-01-02 / EVAL / data"
  • "/ tmp / 1970-01-03 / قطار / بيانات"
  • "/ tmp / 1970-01-03 / EVAL / data"

ويتم عرض تكوين الإدخال على النحو التالي:

splits {
  name: 'train'
  pattern: '{YYYY}-{MM}-{DD}/train/*'
}
splits {
  name: 'eval'
  pattern: '{YYYY}-{MM}-{DD}/eval/*'
}

عند تشغيل خط الأنابيب ، سيتم معالجة:

  • "/ tmp / 1970-01-03 / train / data" عند تقسيم القطار
  • "/ tmp / 1970-01-03 / EVAL / data" كتقسيم EVAL

برقم امتداد كـ "2". إذا كان "/ tmp / 1970-01-04 / ..." جاهزًا في وقت لاحق ، فما عليك سوى تشغيل خط الأنابيب مرة أخرى وسوف يلتقط الامتداد "3" للمعالجة. يظهر أدناه مثال الكود لاستخدام مواصفات التاريخ:

from  tfx.proto import example_gen_pb2

input = example_gen_pb2.Input(splits=[
                example_gen_pb2.Input.Split(name='train',
                                            pattern='{YYYY}-{MM}-{DD}/train/*'),
                example_gen_pb2.Input.Split(name='eval',
                                            pattern='{YYYY}-{MM}-{DD}/eval/*')
            ])
examples = csv_input('/tmp')
example_gen = CsvExampleGen(input=examples, input_config=input)

الإصدار

يمكن استرداد الإصدار باستخدام مواصفات "{VERSION}" في نمط glob للإدخال :

  • تتطابق هذه المواصفات مع الأرقام وتعيين البيانات إلى أرقام الإصدار ذات الصلة ضمن SPAN. لاحظ أنه يمكن استخدام مواصفات الإصدار مع مواصفات Span أو Date.
  • يمكن أيضًا تحديد هذه المواصفات اختياريًا بالعرض بنفس طريقة مواصفات SPAN. على سبيل المثال ، "span- {SPAN} / version- {VERSION: 4} / data- *".
  • عندما تكون مواصفات VERSION مفقودة ، يتم تعيين الإصدار ليكون بلا.
  • إذا تم تحديد كل من SPAN و VERSION ، فسيقوم خط الأنابيب بمعالجة أحدث إصدار لأحدث فترة ، وتخزين رقم الإصدار في البيانات الوصفية.
  • إذا تم تحديد VERSION ، ولكن ليس SPAN (أو مواصفات التاريخ) ، فسيتم طرح خطأ.

على سبيل المثال ، لنفترض أن هناك بيانات إدخال:

  • "/ tmp / span-1 / ver-1 / train / data"
  • "/ tmp / span-1 / ver-1 / EVAL / data"
  • "/ tmp / span-2 / ver-1 / train / data"
  • "/ tmp / span-2 / ver-1 / EVAL / data"
  • "/ tmp / span-2 / ver-2 / train / data"
  • "/ tmp / span-2 / ver-2 / EVAL / data"

ويتم عرض تكوين الإدخال على النحو التالي:

splits {
  name: 'train'
  pattern: 'span-{SPAN}/ver-{VERSION}/train/*'
}
splits {
  name: 'eval'
  pattern: 'span-{SPAN}/ver-{VERSION}/eval/*'
}

عند تشغيل خط الأنابيب ، سيتم معالجة:

  • "/ tmp / span-2 / ver-2 / train / data" كتقسيم القطار
  • "/ tmp / span-2 / ver-2 / EVAL / data" كتقسيم EVAL

برقم امتداد كـ "2" ورقم الإصدار كـ "2". إذا كان '/ tmp / span-2 / ver-3 / ...' جاهزًا في وقت لاحق ، فما عليك سوى تشغيل خط الأنابيب مرة أخرى وسوف يلتقط الامتداد '2' والإصدار '3' للمعالجة. يظهر أدناه مثال الكود لاستخدام مواصفات الإصدار:

from  tfx.proto import example_gen_pb2

input = example_gen_pb2.Input(splits=[
                example_gen_pb2.Input.Split(name='train',
                                            pattern='span-{SPAN}/ver-{VERSION}/train/*'),
                example_gen_pb2.Input.Split(name='eval',
                                            pattern='span-{SPAN}/ver-{VERSION}/eval/*')
            ])
examples = csv_input('/tmp')
example_gen = CsvExampleGen(input=examples, input_config=input)

تكوين النطاق

يدعم TFX استرجاع ومعالجة فترة محددة في ExampleGen القائمة على الملفات باستخدام تكوين النطاق ، وهو تكوين مجرد يستخدم لوصف نطاقات لكيانات TFX المختلفة. لاسترداد مدى معين ، قم بتعيين range_config إلى ملف. على سبيل المثال ، لنفترض أن هناك بيانات إدخال:

  • "/ tmp / span-01 / قطار / بيانات"
  • "/ tmp / span-01 / EVAL / data"
  • "/ tmp / span-02 / قطار / بيانات"
  • "/ tmp / span-02 / EVAL / data"

لاسترداد البيانات ومعالجتها على وجه التحديد مع الامتداد '1' ، نحدد تكوين النطاق بالإضافة إلى تكوين الإدخال. لاحظ أن ExampleGen تدعم فقط نطاقات ثابتة أحادية المدى (لتحديد معالجة نطاقات فردية معينة). وبالتالي ، بالنسبة إلى StaticRange ، يجب أن يساوي start_span_number end_span_number. باستخدام الامتداد المقدم ومعلومات عرض الامتداد (إذا تم توفيرها) للحشو الصفري ، فإن ExampleGen ستحل محل مواصفات SPAN في أنماط التقسيم المتوفرة برقم الامتداد المطلوب. يظهر مثال على الاستخدام أدناه:

from  tfx.proto import example_gen_pb2
from  tfx.proto import range_config_pb2

# In cases where files have zero-padding, the width modifier in SPAN spec is
# required so TFX can correctly substitute spec with zero-padded span number.
input = example_gen_pb2.Input(splits=[
                example_gen_pb2.Input.Split(name='train',
                                            pattern='span-{SPAN:2}/train/*'),
                example_gen_pb2.Input.Split(name='eval',
                                            pattern='span-{SPAN:2}/eval/*')
            ])
# Specify the span number to be processed here using StaticRange.
range = range_config_pb2.RangeConfig(
                static_range=range_config_pb2.StaticRange(
                        start_span_number=1, end_span_number=1)
            )

# After substitution, the train and eval split patterns will be
# 'input_dir/span-01/train/*' and 'input_dir/span-01/eval/*', respectively.
examples = csv_input(input_dir)
example_gen = CsvExampleGen(input=examples, input_config=input,
                            range_config=range)

يمكن أيضًا استخدام تكوين النطاق لمعالجة تواريخ محددة ، إذا تم استخدام مواصفات التاريخ بدلاً من مواصفات SPAN. على سبيل المثال ، لنفترض أن هناك بيانات إدخال منظمة حسب تاريخ التقويم:

  • "/ tmp / 1970-01-02 / train / data"
  • "/ tmp / 1970-01-02 / EVAL / data"
  • "/ tmp / 1970-01-03 / قطار / بيانات"
  • "/ tmp / 1970-01-03 / EVAL / data"

لاسترداد البيانات ومعالجتها على وجه التحديد في الثاني من يناير 1970 ، نقوم بما يلي:

from  tfx.components.example_gen import utils
from  tfx.proto import example_gen_pb2
from  tfx.proto import range_config_pb2

input = example_gen_pb2.Input(splits=[
                example_gen_pb2.Input.Split(name='train',
                                            pattern='{YYYY}-{MM}-{DD}/train/*'),
                example_gen_pb2.Input.Split(name='eval',
                                            pattern='{YYYY}-{MM}-{DD}/eval/*')
            ])
# Specify date to be converted to span number to be processed using StaticRange.
span = utils.date_to_span_number(1970, 1, 2)
range = range_config_pb2.RangeConfig(
                static_range=range_config_pb2.StaticRange(
                        start_span_number=span, end_span_number=span)
            )

# After substitution, the train and eval split patterns will be
# 'input_dir/1970-01-02/train/*' and 'input_dir/1970-01-02/eval/*',
# respectively.
examples = csv_input(input_dir)
example_gen = CsvExampleGen(input=examples, input_config=input,
                            range_config=range)

مثال مخصص

إذا كانت مكونات ExampleGen المتوفرة حاليًا لا تناسب احتياجاتك ، فيمكنك إنشاء نموذج ExampleGen مخصص ، والذي سيمكنك من القراءة من مصادر بيانات مختلفة أو بتنسيقات بيانات مختلفة.

مثال مستند إلى ملف

أولاً ، قم بتوسيع BaseExampleGenExecutor باستخدام Beam PT Transform المخصص ، والذي يوفر التحويل من تقسيم مدخلات القطار / التقييم إلى أمثلة TF. على سبيل المثال ، يوفر المنفذ CsvExampleGen التحويل من تقسيم إدخال CSV إلى أمثلة TF.

بعد ذلك ، قم بإنشاء مكون باستخدام المنفذ أعلاه ، كما هو الحال في مكون CsvExampleGen . بدلاً من ذلك ، قم بتمرير منفذ مخصص إلى مكون ExampleGen القياسي كما هو موضح أدناه.

from tfx.components.base import executor_spec
from tfx.components.example_gen.component import FileBasedExampleGen
from tfx.components.example_gen.csv_example_gen import executor
from tfx.utils.dsl_utils import external_input

examples = external_input(os.path.join(base_dir, 'data/simple'))
example_gen = FileBasedExampleGen(
    input=examples,
    custom_executor_spec=executor_spec.ExecutorClassSpec(executor.Executor))

الآن ، ندعم أيضًا قراءة ملفات Avro و Parquet باستخدام هذه الطريقة .

تنسيقات البيانات الإضافية

يدعم Apache Beam قراءة عدد من تنسيقات البيانات الإضافية . من خلال تحويلات Beam I / O. يمكنك إنشاء مكونات ExampleGen المخصصة من خلال الاستفادة من تحويلات Beam I / O باستخدام نمط مشابه لمثال Avro

  return (pipeline
          | 'ReadFromAvro' >> beam.io.ReadFromAvro(avro_pattern)
          | 'ToTFExample' >> beam.Map(utils.dict_to_example))

حتى كتابة هذه السطور ، تتضمن التنسيقات ومصادر البيانات المدعومة حاليًا لـ Beam Python SDK ما يلي:

  • أمازون S3
  • اباتشي افرو
  • اباتشي هادوب
  • أباتشي كافكا
  • أباتشي باركيه
  • Google Cloud BigQuery
  • Google Cloud BigTable
  • جوجل كلاود داتاستور
  • Google Cloud Pub / Sub
  • Google Cloud Storage (GCS)
  • MongoDB

تحقق من مستندات Beam للحصول على أحدث قائمة.

المثال القائم على الاستعلام

أولاً ، قم بتوسيع BaseExampleGenExecutor باستخدام Beam PTransform المخصص ، والذي يقرأ من مصدر البيانات الخارجي. ثم قم بإنشاء مكون بسيط عن طريق توسيع QueryBasedExampleGen.

قد يتطلب هذا أو لا يتطلب تكوينات اتصال إضافية. على سبيل المثال ، يقرأ المنفذ BigQuery باستخدام موصل beam.io الافتراضي ، والذي يلخص تفاصيل تكوين الاتصال. يتطلب المنفذ Presto تحويل Beam PT مخصصًا وتكوين اتصال مخصص protobuf كمدخل.

إذا كان تكوين الاتصال مطلوبًا لمكون ExampleGen المخصص ، فقم بإنشاء protobuf جديد وقم بتمريره من خلال custom_config ، والذي يعد الآن معلمة تنفيذ اختيارية. يوجد أدناه مثال على كيفية استخدام مكون تم تكوينه.

from tfx.examples.custom_components.presto_example_gen.proto import presto_config_pb2
from tfx.examples.custom_components.presto_example_gen.presto_component.component import PrestoExampleGen

presto_config = presto_config_pb2.PrestoConnConfig(host='localhost', port=8080)
example_gen = PrestoExampleGen(presto_config, query='SELECT * FROM chicago_taxi_trips')

exampleGen مكونات المصب

تكوين الانقسام المخصص مدعوم لمكونات المصب.

الإحصاء

السلوك الافتراضي هو إجراء توليد الإحصائيات لجميع الانقسامات.

لاستبعاد أي تقسيمات ، قم بتعيين exclude_splits لمكوِّن StatisticsGen. فمثلا:

from tfx import components

...

# Exclude the 'eval' split.
statistics_gen = components.StatisticsGen(
             examples=example_gen.outputs['examples'],
             exclude_splits=['eval'])

مخطط

السلوك الافتراضي هو إنشاء مخطط قائم على جميع الانقسامات.

لاستبعاد أي تقسيمات ، exclude_splits الاستثناء_السبليت لمكون SchemaGen. فمثلا:

from tfx import components

...

# Exclude the 'eval' split.
schema_gen = components.SchemaGen(
             statistics=statistics_gen.outputs['statistics'],
             exclude_splits=['eval'])

exampleValidator

السلوك الافتراضي هو التحقق من صحة إحصائيات جميع التقسيمات على أمثلة الإدخال مقابل مخطط.

لاستبعاد أي انقسامات ، exclude_splits الاستثناءات_السبليت لمكون ExampleValidator. فمثلا:

from tfx import components

...

# Exclude the 'eval' split.
example_validator = components.ExampleValidator(
             statistics=statistics_gen.outputs['statistics'],
             schema=schema_gen.outputs['schema'],
             exclude_splits=['eval'])

تحول

السلوك الافتراضي هو تحليل وإنتاج البيانات الوصفية من تقسيم "القطار" وتحويل جميع الانقسامات.

لتحديد تقسيمات التحليل وتحويل الانقسامات ، قم بتعيين splits_config لمكون التحويل. فمثلا:

from tfx import components
from  tfx.proto import transform_pb2

...

# Analyze the 'train' split and transform all splits.
transform = components.Transform(
      examples=example_gen.outputs['examples'],
      schema=schema_gen.outputs['schema'],
      module_file=_taxi_module_file,
      splits_config=transform_pb2.SplitsConfig(analyze=['train'],
                                               transform=['train', 'eval']))

المدرب والموالف

السلوك الافتراضي هو التدريب على تقسيم "القطار" وتقييمه على تقسيم "التقييم".

لتحديد تقسيمات القطار وتقييم الانقسامات ، قم بتعيين train_args و eval_args لمكوِّن المدرب. فمثلا:

from tfx import components
from  tfx.proto import trainer_pb2

...

# Train on the 'train' split and evaluate on the 'eval' split.
Trainer = components.Trainer(
      module_file=_taxi_module_file,
      examples=transform.outputs['transformed_examples'],
      schema=schema_gen.outputs['schema'],
      transform_graph=transform.outputs['transform_graph'],
      train_args=trainer_pb2.TrainArgs(splits=['train'], num_steps=10000),
      eval_args=trainer_pb2.EvalArgs(splits=['eval'], num_steps=5000))

المقيم

السلوك الافتراضي هو توفير مقاييس محسوبة على قسم "التقييم".

لحساب إحصائيات التقييم على الانقسامات المخصصة ، قم بتعيين example_splits لمكون المقيم. فمثلا:

from tfx import components
from  tfx.proto import evaluator_pb2

...

# Compute metrics on the 'eval1' split and the 'eval2' split.
Trainer = components.Evaluator(
      examples=example_gen.outputs['examples'],
      model=trainer.outputs['model'],
      example_splits=['eval1', 'eval2'])