Semua kumpulan data TFDS memaparkan berbagai pemisahan data (misalnya 'train'
, 'test'
) yang dapat dieksplorasi dalam katalog . String alfabet apa pun dapat digunakan sebagai nama pemisahan, terpisah dari all
(yang merupakan istilah khusus yang sesuai dengan gabungan semua pemisahan, lihat di bawah).
Selain pemisahan kumpulan data "resmi", TFDS memungkinkan untuk memilih bagian 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%]')
Pemisahan dapat berupa:
- Nama pemisahan biasa (string seperti
'train'
,'test'
, ...): Semua contoh dalam pemisahan dipilih. - Irisan : Irisan memiliki semantik yang sama dengan notasi irisan python . Irisan bisa berupa:
- Absolut (
'train[123:450]'
,train[:4000]
): (lihat catatan di bawah untuk peringatan tentang urutan baca) - Persen (
'train[:75%]'
,'train[25%:75%]'
): Bagilah seluruh data menjadi beberapa bagian. Jika datanya tidak habis dibagi rata, beberapa persen mungkin berisi contoh tambahan. Persen pecahan didukung. - Shard (
train[:4shard]
,train[4shard]
): Pilih semua contoh di shard yang diminta. (lihatinfo.splits['train'].num_shards
untuk mendapatkan jumlah pecahan yang dipecah)
- Absolut (
- Gabungan pemisahan (
'train+test'
,'train[:25%]+test'
): Pemisahan akan disisipkan bersama. - Kumpulan data lengkap (
'all'
):'all'
adalah nama pemisahan khusus yang sesuai dengan gabungan semua pemisahan (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-pemisahan 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)
Hal ini sangat berguna saat pelatihan dalam lingkungan terdistribusi, di mana setiap host harus menerima sepotong data asli.
Dengan Jax
, hal ini dapat disederhanakan lebih lanjut 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 pemisahan apa pun sebagai input (misalnya 'train[75%:]+test'
)
Pemotongan dan metadata
Dimungkinkan untuk mendapatkan info tambahan tentang pemisahan/subsplit ( 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)
])
Kumpulan data validasi masing-masing akan menjadi 10%: [0%:10%]
, [10%:20%]
, ..., [90%:100%]
. Dan kumpulan data pelatihan masing-masing akan menjadi 90% yang saling melengkapi: [10%:100%]
(untuk kumpulan validasi yang sesuai [0%:10%]
), `[0%:10%]
- [20%:100%]
(for a validation set of
[10%:20%]`),...
tfds.core.ReadInstruction
dan pembulatan
Daripada str
, dimungkinkan untuk meneruskan pemisahan sebagai tfds.core.ReadInstruction
:
Misalnya, split = 'train[50%:75%] + test'
setara dengan:
split = (
tfds.core.ReadInstruction(
'train',
from_=50,
to=75,
unit='%',
)
+ tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)
unit
dapat berupa:
-
abs
: Pengirisan mutlak -
%
: Persen pemotongan -
shard
: Pengirisan pecahan
tfds.ReadInstruction
juga memiliki argumen pembulatan. Jika jumlah contoh dalam kumpulan data tidak terbagi rata:
-
rounding='closest'
(default): Contoh lainnya didistribusikan ke dalam persen, jadi beberapa persen mungkin berisi contoh tambahan. -
rounding='pct1_dropremainder'
: Contoh yang tersisa dihilangkan, tetapi ini menjamin 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 diacak secara deterministik pada disk. Jadi membuat dataset dua kali (di 2 komputer berbeda) tidak akan mengubah urutan contoh.
Demikian pula, API subsplit akan selalu memilih set
contoh yang sama, apa pun platform, arsitektur, dll. Artinya set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')
.
Namun, urutan pembacaan contoh mungkin tidak bersifat deterministik. Ini tergantung pada parameter lain (misalnya apakah shuffle_files=True
).