تعرض جميع مجموعات بيانات TFDS تقسيمات البيانات المختلفة (مثل 'train'
و 'test'
) والتي يمكن استكشافها في الكتالوج . يمكن استخدام أي سلسلة أبجدية كاسم مقسم، باستثناء all
(وهو مصطلح محجوز يتوافق مع اتحاد جميع الانقسامات، انظر أدناه).
بالإضافة إلى تقسيمات مجموعة البيانات "الرسمية"، تسمح 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%]'
): قسّم البيانات الكاملة إلى شرائح متساوية. إذا لم تكن البيانات قابلة للقسمة بالتساوي، فقد تحتوي بعض النسب المئوية على أمثلة إضافية. يتم دعم النسبة المئوية الكسرية. - Shard (
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)
يمكن أن يكون هذا مفيدًا بشكل خاص عند التدريب في بيئة موزعة، حيث يجب أن يتلقى كل مضيف شريحة من البيانات الأصلية.
مع Jax
، يمكن تبسيط ذلك بشكل أكبر باستخدام tfds.split_for_jax_process
:
split = tfds.split_for_jax_process('train', drop_remainder=True)
ds = tfds.load('my_dataset', split=split)
tfds.split_for_jax_process
هو اسم مستعار بسيط لـ:
# The current `process_index` loads only `1 / process_count` of the data.
splits = tfds.even_splits('train', n=jax.process_count(), drop_remainder=True)
split = splits[jax.process_index()]
tfds.even_splits
، يقبل tfds.split_for_jax_process
أي قيمة مقسمة كمدخل (على سبيل المثال 'train[75%:]+test'
)
التقطيع والبيانات الوصفية
من الممكن الحصول على معلومات إضافية حول الانقسامات/التقسيمات الفرعية ( 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']
التحقق من الصحة عبر
أمثلة على التحقق المتبادل بعشرة أضعاف باستخدام واجهة برمجة تطبيقات السلسلة:
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
أيضًا على وسيطة تقريب. إذا لم يتم تقسيم عدد الأمثلة في مجموعة البيانات بالتساوي:
-
rounding='closest'
(افتراضي): يتم توزيع الأمثلة المتبقية بين النسبة المئوية، لذلك قد تحتوي بعض النسب المئوية على أمثلة إضافية. -
rounding='pct1_dropremainder'
: تم حذف الأمثلة المتبقية، ولكن هذا يضمن أن جميع النسب المئوية تحتوي على نفس عدد الأمثلة بالضبط (على سبيل المثال:len(5%) == 5 * len(1%)
).
الاستنساخ والحتمية
أثناء الإنشاء، بالنسبة لإصدار مجموعة بيانات معينة، يضمن TFDS أن الأمثلة يتم خلطها بشكل حتمي على القرص. لذا فإن إنشاء مجموعة البيانات مرتين (في جهازي كمبيوتر مختلفين) لن يغير ترتيب المثال.
وبالمثل، ستحدد واجهة برمجة التطبيقات المقسمة دائمًا نفس set
الأمثلة، بغض النظر عن النظام الأساسي والهندسة المعمارية وما إلى ذلك. وهذا يعني set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')
.
ومع ذلك، فإن الترتيب الذي تُقرأ به الأمثلة قد لا يكون حتميًا. يعتمد هذا على معلمات أخرى (على سبيل المثال ما إذا كانت shuffle_files=True
).