Semua kumpulan data TFDS memaparkan berbagai pemisahan data (misalnya 'train'
, 'test'
) yang dapat dieksplorasi dalam katalog .
Selain pemisahan set data "resmi", TFDS memungkinkan untuk memilih irisan dari pemisahan dan berbagai kombinasi.
Mengiris API
Instruksi pemotongan ditentukan dalam tfds.load
atau tfds.DatasetBuilder.as_dataset
melalui split=
kwarg.
ds = tfds.load('my_dataset', split='train[:75%]')
builder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')
Perpecahan dapat berupa:
- Pemisahan biasa (
'train'
,'test'
): Semua contoh dalam pemisahan yang dipilih. - Slices : Slices memiliki semantik yang sama dengan notasi python slice . Irisan bisa berupa:
- Absolute (
'train[123:450]'
,train[:4000]
): (lihat catatan di bawah untuk peringatan tentang urutan baca) - Persen (
'train[:75%]'
,'train[25%:75%]'
): Bagilah data lengkap menjadi 100 irisan genap. Jika data tidak habis dibagi 100, beberapa persen mungkin berisi contoh tambahan. - Shard (
train[:4shard]
,train[4shard]
): Pilih semua contoh di shard yang diminta. (lihatinfo.splits['train'].num_shards
untuk mendapatkan jumlah pecahan split)
- Absolute (
- Union of splits (
'train+test'
,'train[:25%]+test'
): Perpecahan akan disisipkan bersama. - Dataset lengkap (
'all'
):'all'
adalah nama split khusus yang sesuai dengan gabungan semua split (setara dengan'train+test+...'
). - Daftar pemisahan (
['train', 'test']
): Beberapatf.data.Dataset
dikembalikan secara terpisah:
# Returns both train and test split separately
train_ds, test_ds = tfds.load('mnist', split=['train', 'test[:50%]'])
tfds.even_splits
& pelatihan multi-host
tfds.even_splits
menghasilkan daftar sub-split yang tidak tumpang tindih dengan ukuran yang sama.
# 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)
Ini bisa sangat berguna saat pelatihan dalam pengaturan terdistribusi, di mana setiap host harus menerima sepotong data asli.
Dengan Jax
, ini dapat disederhanakan lebih jauh lagi menggunakan 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
adalah alias sederhana untuk:
# 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
menerima nilai split apa pun sebagai input (mis 'train[75%:]+test'
)
Mengiris dan metadata
Dimungkinkan untuk mendapatkan info tambahan tentang split/subsplits ( num_examples
, file_instructions
,...) menggunakan dataset info :
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']
Validasi silang
Contoh validasi silang 10 kali lipat menggunakan API string:
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)
])
Dataset validasi masing-masing akan menjadi 10%: [0%:10%]
, [10%:20%]
, ..., [90%:100%]
. Dan set data pelatihan masing-masing akan menjadi pelengkap 90%: [10%:100%]
(untuk set validasi terkait [0%:10%]
), `[0%: 10%]
- [20%:100%]
(for a validation set of
[10%:20%]`),...
tfds.core.ReadInstruction
dan pembulatan
Daripada str
, dimungkinkan untuk melewatkan pemisahan sebagai tfds.core.ReadInstruction
:
Misalnya, split = 'train[50%:75%] + test'
sama dengan:
split = (
tfds.core.ReadInstruction(
'train',
from_=50,
to=75,
unit='%',
)
+ tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)
unit
dapat:
-
abs
: Mengiris mutlak -
%
: Persen irisan -
shard
: Pemotongan pecahan
tfds.ReadInstruction
juga memiliki argumen pembulatan. Jika jumlah contoh dalam dataset tidak dibagi rata dengan 100
:
-
rounding='closest'
(default): Contoh yang tersisa didistribusikan di antara persen, jadi beberapa persen mungkin berisi contoh tambahan. -
rounding='pct1_dropremainder'
: Contoh yang tersisa dihilangkan, tetapi jaminan ini semua persen berisi jumlah contoh yang sama persis (misalnya:len(5%) == 5 * len(1%)
).
Reproduksibilitas & determinisme
Selama pembuatan, untuk versi kumpulan data tertentu, TFDS menjamin bahwa contoh dikocok secara deterministik pada disk. Jadi menghasilkan kumpulan data dua kali (di 2 komputer berbeda) tidak akan mengubah urutan contoh.
Demikian pula, API subsplit akan selalu memilih set
contoh yang sama, terlepas dari platform, arsitektur, dll. Ini berarti set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')
.
Namun, urutan contoh yang dibaca mungkin tidak deterministik. Ini tergantung pada parameter lain (misalnya apakah shuffle_files=True
).