Pomoc chronić Wielkiej Rafy Koralowej z TensorFlow na Kaggle Dołącz Wyzwanie

Dzieli i krojenia

Wszystkie zestawy danych TFDS wystawiać różne podziały danych (np 'train' , 'test' ), które mogą zostać zbadane w katalogu .

Oprócz „oficjalnych” podziałów zbioru danych, TFDS umożliwia wybór wycinka(ów) podziału(ów) i różnych kombinacji.

API do krojenia

Instrukcje krojenia podano w tfds.load lub tfds.DatasetBuilder.as_dataset przez split= kwarg.

ds = tfds.load('my_dataset', split='train[:75%]')
builder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')

Podział może być:

  • Podział zwykły ( 'train' , 'test' ): Wszystkie przykłady w wybranym podziale.
  • Plastry: Plastry mają takie same semantyczne jako notacji plasterka python . Plastry mogą być:
    • Absolutny ( 'train[123:450]' , train[:4000] ): (patrz uwaga poniżej zastrzeżenie dotyczące odczytu kolejności)
    • Procent ( 'train[:75%]' , 'train[25%:75%]' ) Dzielenie pełne dane do 100, nawet w plasterki. Jeśli dane nie są podzielne przez 100, pewien procent może zawierać dodatkowe przykłady.
    • Shard ( train[:4shard] , train[4shard] ): Wybierz wszystkie przykłady w wymaganym odłamek. (patrz info.splits['train'].num_shards aby uzyskać liczbę odłamków split)
  • Związek szczelinami ( 'train+test' , 'train[:25%]+test' ): Dzieli się przeplecione ze sobą.
  • Pełny zestaw danych ( 'all' ): 'all' jest specjalną nazwę podzielone odpowiednio do zjednoczenia wszystkich podziałów (odpowiednik 'train+test+...' ).
  • Lista rozłamów ( ['train', 'test'] ): Multiple tf.data.Dataset zwracane są oddzielnie:
# Returns both train and test split separately
train_ds, test_ds = tfds.load('mnist', split=['train', 'test[50%]'])

tfds.even_splits i szkolenia wielu gospodarza

tfds.even_splits generuje listę nienakładających podrzędnych pęknięć o tej samej wielkości.

# 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)

Może to być szczególnie przydatne podczas uczenia w środowisku rozproszonym, w którym każdy host powinien otrzymać wycinek oryginalnych danych. Oto przykład z jaxem:

splits = tfds.even_splits('train', n=jax.process_count(), drop_remainder=True)
# The current `process_index` loads only `1 / process_count` of the data.
ds = tfds.load('my_dataset', split=splits[jax.process_index()])

tfds.even_splits przyjmuje dowolną wartość podziału na wejściu (na przykład 'train[75%:]+test' )

Krojenie i metadane

Jest to możliwe, aby uzyskać dodatkowe informacje na szpagat / subsplits ( num_examples , file_instructions , ...) z wykorzystaniem informacji zestawu danych :

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']

Walidacja krzyżowa

Przykłady 10-krotnego sprawdzania poprawności krzyżowej przy użyciu interfejsu API ciągów:

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)
])

Zbiory danych walidacji każda będzie 10%: [0%:10%] , [10%:20%] , ..., [90%:100%] . I zestawy danych szkoleniowych każdy będzie komplementarne: 90% [10%:100%] (na odpowiednim zestawie walidacji [0%:10%] ), '[0% 10%]

  • [20%: 100%] (for a validation set of [10%: 20%] `) ...

tfds.core.ReadInstruction i zaokrąglanie

Zamiast str , jest możliwe przejście dzieli jak tfds.core.ReadInstruction :

Na przykład, split = 'train[50%:75%] + test' odpowiada:

split = (
    tfds.core.ReadInstruction(
        'train',
        from_=50,
        to=75,
        unit='%',
    )
    + tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)

unit może być:

  • abs : bezwzględna krojenia
  • % : Procent krojenia
  • shard : Skorupa krojenia

tfds.ReadInstruction ma również argument zaokrąglenia. Jeżeli liczba przykład w zbiorze danych nie jest równomiernie podzielić przez 100 :

  • rounding='closest' (domyślnie): Pozostałe przykłady są dystrybuowane wśród procent, więc niektóre procent może zawierać dodatkowe przykłady.
  • rounding='pct1_dropremainder' : Pozostałe przykłady spadła, ale zagwarantować, że wszystkie procent zawiera dokładnie tę samą liczbę przykładzie (np len(5%) == 5 * len(1%) ).

Odtwarzalność i determinizm

Podczas generowania, dla danej wersji zestawu danych, TFDS gwarantuje, że przykłady są deterministycznie tasowane na dysku. Zatem dwukrotne wygenerowanie zestawu danych (na 2 różnych komputerach) nie zmieni przykładowej kolejności.

Podobnie API subsplit zawsze wybrać ten sam set przykładów, niezależnie od platformy, architektury, itp to oznacza set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]') .

Jednak kolejność, w której przykładami są czytane nie może być deterministyczny. To zależy od innych parametrów (np czy shuffle_files=True ).