تشققات وتقطيع

جميع قواعد البيانات TFDS تعرض الانقسامات البيانات المختلفة (على سبيل المثال 'train' ، 'test' ) التي يمكن استكشافها في كتالوج .

بالإضافة إلى تقسيمات مجموعة البيانات "الرسمية" ، تسمح TFDS بتحديد شريحة (شرائح) من التقسيم (الأجزاء) ومجموعة متنوعة.

تشريح API

يتم تحديد تعليمات تشريح في tfds.load أو tfds.DatasetBuilder.as_dataset من خلال split= kwarg.

ds = tfds.load('my_dataset', split='train[:75%]')
builder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')

يمكن أن يكون الانقسام:

  • انقسام عادي ( 'train' ، 'test' ): جميع الأمثلة ضمن الانقسام المحدد.
  • شرائح: شرائح لديها نفس الدلالي كما تدوين الثعبان شريحة . يمكن أن تكون الشرائح:
    • مطلق ( 'train[123:450]' ، train[:4000] ): (انظر الملاحظة رفع الصوت عاليا للتحذير حول ترتيب قراءة)
    • في المئة ( 'train[:75%]' ، 'train[25%:75%]' ): تقسيم البيانات الكاملة إلى 100 شرائح حتى. إذا كانت البيانات غير قابلة للقسمة على 100 ، فقد تحتوي بعض النسبة المئوية على أمثلة إضافية.
    • شارد ( train[:4shard] ، train[4shard] ): حدد كافة الأمثلة في قشرة المطلوبة. (انظر info.splits['train'].num_shards للحصول على عدد من شظايا الانقسام)
  • الاتحاد انشقاقات ( 'train+test' ، 'train[:25%]+test' ): سيتم معشق الإنشقاقات معا.
  • البيانات الكاملة ( 'all' ): 'all' هو اسم انقسام خاص المقابلة للاتحاد عن انشقاقات (ما يعادل 'train+test+...' ).
  • قائمة انشقاقات ( ['train', 'test'] متعددة:) tf.data.Dataset يتم إرجاع كل على حدة:
# Returns both train and test split separately
train_ds, test_ds = tfds.load('mnist', split=['train', 'test[50%]'])

tfds.even_splits والتدريب متعددة المضيف

tfds.even_splits يولد قائمة غير متداخلة انقسامات فرعية من نفس الحجم.

# Divide the dataset into 3 even parts, each containing 1/3 of the data
split0, split1, split2 = tfds.even_splits('train', n=3)

ds = tfds.load('my_dataset', split=split2)

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

splits = tfds.even_splits('train', n=jax.process_count(), drop_remainder=True)
# The current `process_index` load only `1 / process_count` of the data.
ds = tfds.load('my_dataset', split=splits[jax.process_index()])

tfds.even_splits يقبل على أي قيمة الانقسام كمدخل (على سبيل المثال 'train[75%:]+test' )

التقطيع والبيانات الوصفية

ومن الممكن الحصول على معلومات إضافية عن انشقاقات / subsplits ( num_examples ، file_instructions ، ...) باستخدام معلومات بيانات :

builder = tfds.builder('my_dataset')
builder.info.splits['train'].num_examples  # 10_000
builder.info.splits['train[:75%]'].num_examples  # 7_500 (also works with slices)
builder.info.splits.keys()  # ['train', 'test']

عبر المصادقة

أمثلة على التحقق من صحة 10 أضعاف باستخدام سلسلة API:

vals_ds = tfds.load('mnist', split=[
    f'train[{k}%:{k+10}%]' for k in range(0, 100, 10)
])
trains_ds = tfds.load('mnist', split=[
    f'train[:{k}%]+train[{k+10}%:]' for k in range(0, 100, 10)
])

مجموعات البيانات التحقق من صحة تسير كل لتكون 10٪: [0%:10%] ، [10%:20%] ، ...، [90%:100%] . وقواعد البيانات التدريب تسير كل لتكون مكملة 90٪: [10%:100%] (لالمقابلة مجموعة من التحقق من صحة [0%:10%] )، `[0٪: 10٪]

  • [20٪: 100٪] (for a validation set of [10٪: 20٪] `)، ...

tfds.core.ReadInstruction والتقريب

بدلا من str ، فمن الممكن أن يمر انشقاقات كما tfds.core.ReadInstruction :

على سبيل المثال، split = 'train[50%:75%] + test' ما يعادل:

split = (
    tfds.core.ReadInstruction(
        'train',
        from_=50,
        to=75,
        unit='%',
    )

    + tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)

unit يمكن أن يكون:

  • abs : تشريح المطلق
  • % : نسبة التقطيع
  • shard : شارد تشريح

tfds.ReadInstruction أيضا لديه حجة التقريب. وإذا كان عدد المثال في مجموعة البيانات ليس تقسيم بالتساوي بواسطة 100 :

  • rounding='closest' توزع الأمثلة المتبقية بين بالمئة، لذلك قد تحتوي على بعض في المئة أمثلة إضافية: (الافتراضي).
  • rounding='pct1_dropremainder' : يتم إسقاط الأمثلة المتبقية، ولكن هذا الضمان كل بالمئة تحتوي على نفس العدد الدقيق للالمثال (على سبيل المثال: len(5%) == 5 * len(1%) ).

التكاثر والحتمية

أثناء الإنشاء ، بالنسبة لإصدار مجموعة بيانات معينة ، تضمن TFDS أن الأمثلة يتم خلطها بشكل حتمي على القرص. لذا فإن إنشاء مجموعة البيانات مرتين (في جهازي كمبيوتر مختلفين) لن يغير ترتيب الأمثلة.

وبالمثل، فإن API subsplit دائما اختيار نفس set من الأمثلة، بغض النظر عن المنصة، الهندسة المعمارية، وغير ذلك وهذا يعني set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]') .

ومع ذلك، قد الترتيب الذي تتم قراءة سبيل المثال لا تكون حتمية. هذا يعتمد على العوامل الأخرى (على سبيل المثال ما إذا كانت shuffle_files=True ).