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

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

تعرض جميع DatasetBuilder مجموعات فرعية مختلفة من البيانات المحددة على أنها تقسيمات (على سبيل المثال: train ، test ). عند إنشاء مثيل tf.data.Dataset باستخدام tfds.load() أو tfds.DatasetBuilder.as_dataset() ، يمكن للمرء تحديد أي تقسيم ( tfds.DatasetBuilder.as_dataset() ) سيتم استرداده. من الممكن أيضًا استرداد شريحة (شرائح) التقسيم (الأجزاء) بالإضافة إلى مجموعات منها.

تشريح API

يتم تحديد إرشادات التقطيع في tfds.load أو tfds.DatasetBuilder.as_dataset .

يمكن توفير التعليمات كسلاسل أو ReadInstruction . تكون السلاسل أكثر إحكاما وقابلة للقراءة للحالات البسيطة ، بينما توفر ReadInstruction المزيد من الخيارات وقد يكون من الأسهل استخدامها مع معلمات التقطيع المتغيرة.

أمثلة

أمثلة باستخدام سلسلة API:

# The full `train` split.
train_ds = tfds.load('mnist', split='train')

# The full `train` split and the full `test` split as two distinct datasets.
train_ds, test_ds = tfds.load('mnist', split=['train', 'test'])

# The full `train` and `test` splits, interleaved together.
train_test_ds = tfds.load('mnist', split='train+test')

# From record 10 (included) to record 20 (excluded) of `train` split.
train_10_20_ds = tfds.load('mnist', split='train[10:20]')

# The first 10% of train split.
train_10pct_ds = tfds.load('mnist', split='train[:10%]')

# The first 10% of train + the last 80% of train.
train_10_80pct_ds = tfds.load('mnist', split='train[:10%]+train[-80%:]')

# 10-fold cross-validation (see also next section on rounding behavior):
# The validation datasets are each going to be 10%:
# [0%:10%], [10%:20%], ..., [90%:100%].
# And the training datasets are each going to be the complementary 90%:
# [10%:100%] (for a corresponding validation set of [0%:10%]),
# [0%:10%] + [20%:100%] (for a validation set of [10%:20%]), ...,
# [0%:90%] (for a validation set of [90%:100%]).
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)
])

أمثلة باستخدام ReadInstruction API (المكافئة على النحو الوارد أعلاه):

# The full `train` split.
train_ds = tfds.load('mnist', split=tfds.core.ReadInstruction('train'))

# The full `train` split and the full `test` split as two distinct datasets.
train_ds, test_ds = tfds.load('mnist', split=[
    tfds.core.ReadInstruction('train'),
    tfds.core.ReadInstruction('test'),
])

# The full `train` and `test` splits, interleaved together.
ri = tfds.core.ReadInstruction('train') + tfds.core.ReadInstruction('test')
train_test_ds = tfds.load('mnist', split=ri)

# From record 10 (included) to record 20 (excluded) of `train` split.
train_10_20_ds = tfds.load('mnist', split=tfds.core.ReadInstruction(
    'train', from_=10, to=20, unit='abs'))

# The first 10% of train split.
train_10_20_ds = tfds.load('mnist', split=tfds.core.ReadInstruction(
    'train', to=10, unit='%'))

# The first 10% of train + the last 80% of train.
ri = (tfds.core.ReadInstruction('train', to=10, unit='%') +
      tfds.core.ReadInstruction('train', from_=-80, unit='%'))
train_10_80pct_ds = tfds.load('mnist', split=ri)

# 10-fold cross-validation (see also next section on rounding behavior):
# The validation datasets are each going to be 10%:
# [0%:10%], [10%:20%], ..., [90%:100%].
# And the training datasets are each going to be the complementary 90%:
# [10%:100%] (for a corresponding validation set of [0%:10%]),
# [0%:10%] + [20%:100%] (for a validation set of [10%:20%]), ...,
# [0%:90%] (for a validation set of [90%:100%]).
vals_ds = tfds.load('mnist', [
    tfds.core.ReadInstruction('train', from_=k, to=k+10, unit='%')
    for k in range(0, 100, 10)])
trains_ds = tfds.load('mnist', [
    (tfds.core.ReadInstruction('train', to=k, unit='%') +
     tfds.core.ReadInstruction('train', from_=k+10, unit='%'))
    for k in range(0, 100, 10)])

tfds.even_splits

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

assert tfds.even_splits('train', n=3) == [
    'train[0%:33%]', 'train[33%:67%]', 'train[67%:100%]',
]

النسبة المئوية للتقطيع والتقريب

إذا تم طلب شريحة من الانقسام باستخدام وحدة النسبة المئوية ( % ) ، ولم يتم تقسيم حدود الشريحة المطلوبة بالتساوي على 100 ، فإن السلوك الافتراضي هو تقريب الحدود إلى أقرب عدد صحيح ( closest ). هذا يعني أن بعض الشرائح قد تحتوي على أمثلة أكثر من غيرها. فمثلا:

# Assuming "train" split contains 101 records.
# 100 records, from 0 to 100.
tfds.load("mnist", split="test[:99%]")
# 2 records, from 49 to 51.
tfds.load("mnist", split="test[49%:50%]")

بدلاً من ذلك ، يمكن للمستخدم استخدام pct1_dropremainder التقريب ، لذلك يتم التعامل مع حدود النسبة المئوية المحددة pct1_dropremainder 1٪. يجب استخدام هذا الخيار عند الحاجة إلى الاتساق (على سبيل المثال: len(5%) == 5 * len(1%) ). هذا يعني أنه قد يتم اقتطاع الأمثلة الأخيرة إذا كانت info.split[split_name].num_examples % 100 != 0 .

مثال:

# Records 0 (included) to 99 (excluded).
split = tfds.core.ReadInstruction(
    'test',
    to=99,
    rounding='pct1_dropremainder',
    unit = '%',
)
tfds.load("mnist", split=split)

قابلية اعادة الأنتاج

تضمن واجهة برمجة التطبيقات ذات الانقسام الفرعي أن أي شريحة مقسمة معينة (أو ReadInstruction ) ستنتج دائمًا نفس مجموعة السجلات في مجموعة بيانات معينة ، طالما أن الإصدار الرئيسي من مجموعة البيانات ثابت.

على سبيل المثال ، tfds.load("mnist:3.0.0", split="train[10:20]") و tfds.load("mnist:3.2.0", split="train[10:20]") ستحتوي دائمًا على نفس العناصر - بغض النظر عن النظام الأساسي ، والهندسة المعمارية ، وما إلى ذلك - على الرغم من أن بعض السجلات قد تحتوي على قيم مختلفة (على سبيل المثال: تشفير الصور ، التسمية ، ...).