Aiuto proteggere la Grande Barriera Corallina con tensorflow sul Kaggle Join Sfida

Versionamento dei set di dati

Definizione

Il versionamento può riferirsi a diversi significati:

  • La versione TFDS API (versione pip): tfds. version
  • La versione dataset pubblico, indipendente dalla TFDS (ad esempio Voc2007 , Voc2012). In TFDS ogni versione del set di dati pubblico dovrebbe essere implementata come set di dati indipendente:
    • Sia attraverso configurazioni costruttore : Eg voc/2007 , voc/2012
    • Sia come 2 dataset indipendenti: Eg wmt13_translate , wmt14_translate
  • La versione del codice di generazione di dati in TFDS ( my_dataset:1.0.0 ): per esempio, se un errore si trova nella realizzazione TFDS di voc/2007 , il voc.py generazione di codice sarà aggiornato ( voc/2007:1.0.0 - > voc/2007:2.0.0 ).

Il resto di questa guida si concentra solo sull'ultima definizione (versione del codice del set di dati nel repository TFDS).

Versioni supportate

Come regola generale:

  • È possibile generare solo l'ultima versione corrente.
  • È possibile leggere tutti i set di dati generati in precedenza (nota: ciò richiede i set di dati generati con TFDS 4+).
builder = tfds.builder('my_dataset')
builder.info.version  # Current version is: '2.0.0'

# download and load the last available version (2.0.0)
ds = tfds.load('my_dataset')

# Explicitly load a previous version (only works if
# `~/tensorflow_datasets/my_dataset/1.0.0/` already exists)
ds = tfds.load('my_dataset:1.0.0')

Semantico

Ogni DatasetBuilder definito TFDS viene fornito con una versione, ad esempio:

class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version('2.0.0')
  RELEASE_NOTES = {
      '1.0.0': 'Initial release',
      '2.0.0': 'Update dead download url',
  }

La versione segue Semantic Versioning 2.0.0 : MAJOR.MINOR.PATCH . Lo scopo della versione è quello di poter garantire la riproducibilità: caricando un dato dataset ad una versione fissa si ottengono gli stessi dati. Più specificamente:

  • Se PATCH viene incrementato versione, dati come letto dal client è lo stesso, anche se i dati potrebbero essere serializzati diverso su disco, o i metadati potrebbero essere cambiate. Per una determinata porzione, l'API di sezionamento restituisce lo stesso set di record.
  • Se MINOR viene incrementato la versione, i dati esistenti come letto dal cliente è lo stesso, ma ci sono dati aggiuntivi (caratteristiche in ogni record). Per una determinata porzione, l'API di sezionamento restituisce lo stesso set di record.
  • Se MAJOR viene incrementato la versione, i dati esistenti è stato modificato e / o l'API affettare non necessariamente restituire lo stesso insieme di record per un dato fetta.

Quando viene apportata una modifica al codice alla libreria TFDS e tale modifica al codice influisce sul modo in cui un set di dati viene serializzato e/o letto dal client, la versione del builder corrispondente viene incrementata in base alle linee guida di cui sopra.

Nota che la semantica di cui sopra è il miglior sforzo e potrebbero esserci bug non rilevati che influiscono su un set di dati mentre la versione non è stata incrementata. Tali bug sono finalmente risolti, ma se si basano pesantemente sul controllo delle versioni, vi consigliamo di utilizzare TFDS da una versione rilasciata (al contrario di HEAD ).

Si noti inoltre che alcuni set di dati hanno un altro schema di versione indipendente dalla versione TFDS. Ad esempio, le immagini aperte set di dati ha diverse versioni, e in TFDS, i costruttori corrispondenti sono open_images_v4 , open_images_v5 , ...

Caricamento di una versione specifica

Quando si carica un set di dati o un DatasetBuilder , è possibile specificare la versione per l'uso. Per esempio:

tfds.load('imagenet2012:2.0.1')
tfds.builder('imagenet2012:2.0.1')

tfds.load('imagenet2012:2.0.0')  # Error: unsupported version.

# Resolves to 3.0.0 for now, but would resolve to 3.1.1 if when added.
tfds.load('imagenet2012:3.*.*')

Se utilizzi TFDS per una pubblicazione, ti consigliamo di:

  • fissare il MAJOR componente solo la versione;
  • pubblicizzare quale versione del set di dati è stata utilizzata nei risultati.

Ciò dovrebbe rendere più facile per te stesso, i tuoi lettori e revisori futuri riprodurre i tuoi risultati.

BUILDER_CONFIGS e versioni

Alcuni gruppi di dati definiscono diverse BUILDER_CONFIGS . Quando questo è il caso, version e supported_versions sono definite sui config stessi oggetti. A parte questo, semantica e utilizzo sono identici. Per esempio:

class OpenImagesV4(tfds.core.GeneratorBasedBuilder):

  BUILDER_CONFIGS = [
      OpenImagesV4Config(
          name='original',
          version=tfds.core.Version('0.2.0'),
          supported_versions=[
            tfds.core.Version('1.0.0', "Major change in data"),
          ],
          description='Images at their original resolution and quality.'),
      ...
  ]

tfds.load('open_images_v4/original:1.*.*')

Versione sperimentale

È possibile consentire la generazione di 2 versioni contemporaneamente. Una versione predefinita e una sperimentale. Per esempio:

class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version("1.0.0")  # Default version
  SUPPORTED_VERSIONS = [
      tfds.core.Version("2.0.0"),  # Experimental version
  ]


# Download and load default version 1.0.0
builder = tfds.builder('mnist')

#  Download and load experimental version 2.0.0
builder = tfds.builder('mnist', version='experimental_latest')

Nel codice, devi assicurarti di supportare le 2 versioni:

class MNIST(tfds.core.GeneratorBasedBuilder):

  ...

  def _generate_examples(self, path):
    if self.info.version >= '2.0.0':
      ...
    else:
      ...