Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Datensammlungen Versionierung

semantisch

Jeder DatasetBuilder in TFDS definiert wird mit einer Version, zum Beispiel:

 class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version("1.0.0")
 

Die Version folgt Semantische Versionierung 2.0.0 : MAJOR.MINOR.PATCH . Der Zweck der Version ist zu garantieren Reproduzierbarkeit in der Lage sein: einen gegebenen Datensatz mit einer festen Version lädt die gleichen Daten liefert. Genauer:

  • Wenn PATCH Version erhöht wird, werden Daten als Lese durch den Client ist die gleiche, auch wenn die Daten möglicherweise anders auf dem Datenträger serialisiert werden, oder die Metadaten geändert haben könnten. Für jede gegebene Scheibe, kehrt die API slicing den gleichen Satz von Datensätzen.
  • Wenn MINOR Version erhöht, vorhandene Daten wie vom Client lesen ist die gleiche, aber es gibt zusätzliche Daten (Funktionen in jedem Datensatz). Für jede gegebene Scheibe, kehrt die API slicing den gleichen Satz von Datensätzen.
  • Wenn MAJOR Version erhöht wird, hat die vorhandenen Daten geändert und / oder das Aufschneiden API , um die gleiche Menge von Datensätzen für eine bestimmte Scheibe nicht unbedingt zurück.

Wenn eine Codeänderung in der Bibliothek TFDS gemacht wird und dass die Codeänderung wirkt sich auf die Art und Weise ein Datensatz serialisiert werden und / oder durch den Kunden lesen, dann wird der entsprechende Builder Version erhöht entsprechend den oben genannten Richtlinien.

Beachten Sie, dass die oben genannten semantischen Best Effort, und es könnte un-bemerkt Fehler einen Datensatz sein auswirken, während die Version wurde nicht erhöht. Solche Fehler sind schließlich festgelegt, aber wenn man sich stark auf der Versionierung verlassen, empfehlen wir Ihnen aus einer veröffentlichten Version TFDS zu verwenden (im Gegensatz zu HEAD ).

Beachten Sie auch, dass einige Datensätze ein anderes Versionsschema unabhängig von der TFDS Version. Zum Beispiel, Datensatz die Bilder öffnen mehrere Versionen hat, und in TFDS die entsprechenden Builder sind open_images_v4 , open_images_v5 , ...

Unterstützte Versionen

Ein DatasetBuilder können mehrere Versionen unterstützen, die beide höher sein kann oder niedriger als die kanonische Version. Beispielsweise:

 class Imagenet2012(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version('2.0.1', 'Encoding fix. No changes from user POV')
  SUPPORTED_VERSIONS = [
      tfds.core.Version('3.0.0', 'S3: tensorflow.org/datasets/splits'),
      tfds.core.Version('1.0.0'),
      tfds.core.Version('0.0.9', tfds_version_to_prepare="v1.0.0"),
  ]
 

Die Wahl weiterhin zu unterstützen eine ältere Version auf einer Fall-zu-Fall-Basis durchgeführt wird, vor allem auf der Popularität des Datensatz und die Version. Schließlich streben wir nur eine begrenzte Anzahl Versionen pro Daten-Set unterstützt, im Idealfall ein. In dem obigen Beispiel können wir sehen , dass Version 2.0.0 wird nicht mehr unterstützt, als identisch mit 2.0.1 von einem Leser Perspektive.

Unterstützte Versionen mit einer höheren Nummer als der kanonische Versionsnummer sind als experimentell und könnte gebrochen werden. Sie werden jedoch schließlich kanonische gemacht werden.

Eine Version kann angeben tfds_version_to_prepare . Dies bedeutet dieser Datensatz-Version kann nur mit der aktuellen Version von TFDS Code verwendet werden, wenn es bereits eine ältere Version des Codes hergestellt worden ist, kann jedoch nicht hergestellt werden. Der Wert von tfds_version_to_prepare gibt an die letzte bekannte Version von TFDS , die zum Download verwendet werden können , und den Datensatz in dieser Version vorzubereiten.

Laden einer bestimmten Version

Wenn ein Dataset oder ein Laden DatasetBuilder , können Sie die Version verwenden angeben. Beispielsweise:

 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.*.*')
 

Bei der Verwendung von TFDS für eine Publikation, raten wir Ihnen:

  • fixieren die MAJOR Komponente der Version nur;
  • werben , welche Version des Datensatzes in den Ergebnissen verwendet wurde.

Dabei sollte für Ihre Zukunft selbst macht es einfacher, Ihre Leser und Rezensenten Ihre Ergebnisse zu reproduzieren.

Experimente

Um schrittweise Veränderungen in TFDS ausrollen, die viele Daten-Set Builder auswirken, haben wir den Begriff der Experimente. Wenn zuerst eingeführt wird ein Experiment standardmäßig deaktiviert, aber bestimmte Daten-Set-Versionen entscheiden können, es zu aktivieren. Dies wird in der Regel auf „Zukunft“ Versionen erfolgen (nicht kanonischen gemacht noch) nicht auf dem ersten. Beispielsweise:

 class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version("1.0.0")
  SUPPORTED_VERSIONS = [
      tfds.core.Version("2.0.0", "EXP1: Opt-in for experiment 1",
                        experiments={tfds.core.Experiment.EXP1: True}),
  ]
 

Sobald ein Experiment wie erwartet überprüft wurde, wird es für alle oder die meisten Datensätze erweitert werden, an welcher Stelle es standardmäßig aktiviert werden kann, und die obige Definition würde wie dann aussehen:

 class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version("1.0.0",
                              experiments={tfds.core.Experiment.EXP1: False})
  SUPPORTED_VERSIONS = [
      tfds.core.Version("2.0.0", "EXP1: Opt-in for experiment 1"),
  ]
 

Sobald ein Experiment über alle Datensätze Versionen verwendet wird (es gibt keine Dataset Version links Angabe {experiment: False} ), kann der Versuch gelöscht werden.

Experimente und ihre Beschreibung sind in definierten core/utils/version.py .

BUILDER_CONFIGS und Versionen

Einige Datensätze definieren mehrere BUILDER_CONFIGS . Wenn das der Fall ist , version und supported_versions definiert sind , auf die Config - Objekte selbst. Other than that, ist Semantik und Nutzung identisch. Beispielsweise:

 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.*.*')