Alle TFDS Datensätze verschiedene Daten Splits (zB aussetzen 'train'
, 'test'
) , die im erkundet werden kann Katalog .
Zusätzlich zu den "offiziellen" Datensatz-Splits ermöglicht TFDS die Auswahl von Slice(s) von Split(s) und verschiedenen Kombinationen.
Slicing-API
Slicing Anweisungen sind in angegeben tfds.load
oder tfds.DatasetBuilder.as_dataset
durch die split=
kwarg.
ds = tfds.load('my_dataset', split='train[:75%]')
builder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')
Aufteilung kann sein:
- Plain split (
'train'
,'test'
): Alle Beispiele in den geteilten ausgewählt. - Scheiben: Scheiben haben die gleiche Semantik wie Python Slice - Notation . Scheiben können sein:
- Absolute (
'train[123:450]'
,train[:4000]
): (Anmerkung unten für caveat über Lese , um zu sehen) - Prozent (
'train[:75%]'
,'train[25%:75%]'
): Teilen Sie die vollständigen Daten in 100 sogar Scheiben schneiden. Wenn die Daten nicht durch 100 teilbar sind, können einige Prozent zusätzliche Beispiele enthalten. - Splitter (
train[:4shard]
,train[4shard]
): Wählen Sie alle Beispiele in der gewünschten Scherbe. (sieheinfo.splits['train'].num_shards
die Anzahl der Scherben der Spaltung zu bekommen)
- Absolute (
- Union der Teilungen (
'train+test'
,'train[:25%]+test'
): Splits zusammen verschachtelt werden. - Volldatensatz (
'all'
):'all'
ist ein spezieller Split Namen der Vereinigung aller Splits (äquivalent zu entsprechenden'train+test+...'
). - Liste der Splits (
['train', 'test']
): Mehreretf.data.Dataset
werden separat zurückgegeben:
# Returns both train and test split separately
train_ds, test_ds = tfds.load('mnist', split=['train', 'test[50%]'])
tfds.even_splits
& Multi-Host - Training
tfds.even_splits
erzeugt eine Liste der nicht überlappenden Unter Splits von gleicher Größe.
# 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)
Dies kann besonders nützlich sein, wenn Sie in einer verteilten Umgebung trainieren, in der jeder Host einen Ausschnitt der Originaldaten erhalten soll. Hier ist ein Beispiel mit jax:
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
nimmt auf jedem geteilten Wert als Eingabe (zB 'train[75%:]+test'
)
Slicen und Metadaten
Es ist möglich , zusätzliche Informationen über die Splits / subsplits (um num_examples
, file_instructions
, ...) , um die Verwendung von Daten - Set 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']
Kreuzvalidierung
Beispiele für eine 10-fache Kreuzvalidierung mit der String-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)
])
Die Validierungs Datensätze werden jeweils 10% sein: [0%:10%]
, [10%:20%]
, ..., [90%:100%]
. Und die Trainingsdatensätze werden jeweils das komplementäre 90% sein: [10%:100%]
(für einen entsprechenden Validierungssatz von [0%:10%]
), `[0%: 10%]
- [20%: 100%]
(for a validation set of
[10%: 20%]) `, ...
tfds.core.ReadInstruction
und Rundung
Anstatt str
, ist es möglich , Splits als passieren tfds.core.ReadInstruction
:
Zum Beispiel split = 'train[50%:75%] + test'
entspricht:
split = (
tfds.core.ReadInstruction(
'train',
from_=50,
to=75,
unit='%',
)
+ tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)
unit
können sein:
-
abs
: Absolute Slicing -
%
: Prozent Slicing -
shard
: Shard Slicing
tfds.ReadInstruction
hat auch eine Rundung Argument. Wenn die Anzahl der im Datensatz Beispiel teilen ist nicht gleichmäßig von 100
:
-
rounding='closest'
(Standard): Die restlichen Beispiele sind unter den Prozent verteilt, so dass einige Prozent weitere Beispiele enthalten könnten. -
rounding='pct1_dropremainder'
Die verbleibenden Beispiele werden fallen gelassen, aber dies mit Sicherheit Prozent enthalten , die genau die gleiche Anzahl von Beispiel (zB:len(5%) == 5 * len(1%)
).
Reproduzierbarkeit & Determinismus
Während der Generierung garantiert TFDS für eine gegebene Datensatzversion, dass Beispiele deterministisch auf der Festplatte gemischt werden. Das zweimalige Generieren des Datensatzes (in 2 verschiedenen Computern) ändert die Beispielreihenfolge nicht.
In ähnlicher Weise wird die subsplit API immer den gleichen Auswahl set
von Beispielen, unabhängig von der Plattform, Architektur usw. Dieses Mittelwert - set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')
.
Allerdings sind die Reihenfolge , in der beispielsweise liest vielleicht nicht deterministisch sein. Dies ist abhängig von anderen Parametern (zB ob shuffle_files=True
).