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

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

  • يستهلك: البيانات من مصادر البيانات الخارجية مثل CSV و TFRecord و Avro و Parquet و BigQuery.
  • ينبعث: سجلات tf.Example ، سجلات 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 و proto ونتائج استعلامات BigQuery) يمكن استخدام مكون خط أنابيب ExampleGen مباشرةً في النشر ولا يتطلب سوى القليل من التخصيص. فمثلا:

example_gen = CsvExampleGen(input_base='data_root')

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

example_gen = ImportExampleGen(input_base=path_to_tfrecord_dir)

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

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

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

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

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

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

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

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

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

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


# 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 = proto.Input(splits=[
                example_gen_pb2.Input.Split(name='train', pattern='train/*'),
                example_gen_pb2.Input.Split(name='eval', pattern='eval/*')
            ])
example_gen = CsvExampleGen(input_base=input_dir, 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. فمثلا:

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

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

يولد

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

  • تتطابق هذه المواصفات مع الأرقام وتعيين البيانات إلى أرقام 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" للمعالجة. يظهر أدناه مثال الكود لاستخدام مواصفات النطاق:

input = proto.Input(splits=[
                proto.Input.Split(name='train',
                                            pattern='span-{SPAN}/train/*'),
                proto.Input.Split(name='eval',
                                            pattern='span-{SPAN}/eval/*')
            ])
example_gen = CsvExampleGen(input_base='/tmp', 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 / قطار / بيانات"
  • "/ 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" للمعالجة. يظهر أدناه مثال الكود لاستخدام مواصفات التاريخ:

input = proto.Input(splits=[
                proto.Input.Split(name='train',
                                            pattern='{YYYY}-{MM}-{DD}/train/*'),
                proto.Input.Split(name='eval',
                                            pattern='{YYYY}-{MM}-{DD}/eval/*')
            ])
example_gen = CsvExampleGen(input_base='/tmp', 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 / قطار / بيانات"
  • "/ 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 / قطار / بيانات"
  • "/ 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' للمعالجة. يظهر أدناه مثال الكود لاستخدام مواصفات الإصدار:

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

تكوين النطاق

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

  • "/ 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 في أنماط التقسيم المتوفرة برقم الامتداد المطلوب. يتم عرض مثال على الاستخدام أدناه:

# 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 = proto.Input(splits=[
                proto.Input.Split(name='train',
                                            pattern='span-{SPAN:2}/train/*'),
                proto.Input.Split(name='eval',
                                            pattern='span-{SPAN:2}/eval/*')
            ])
# Specify the span number to be processed here using StaticRange.
range = proto.RangeConfig(
                static_range=proto.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.
example_gen = CsvExampleGen(input_base=input_dir, input_config=input,
                            range_config=range)

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

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

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

from  tfx.components.example_gen import utils

input = proto.Input(splits=[
                proto.Input.Split(name='train',
                                            pattern='{YYYY}-{MM}-{DD}/train/*'),
                proto.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 = proto.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.
example_gen = CsvExampleGen(input_base=input_dir, 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.csv_example_gen import executor

example_gen = FileBasedExampleGen(
    input_base=os.path.join(base_dir, 'data/simple'),
    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 للحصول على أحدث قائمة.

مثال على أساس استعلام التخصيص Gen (تجريبي)

أولاً ، قم بتوسيع 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. فمثلا:

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

مخطط

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

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

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

exampleValidator

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

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

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

تحول

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

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

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

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

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

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

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

المقيم

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

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

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

تتوفر المزيد من التفاصيل في مرجع CsvExampleGen API ومرجع API FileBasedExampleGen ومرجع واجهة برمجة تطبيقات ImportExampleGen .