Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Versiones de conjuntos de datos

Semántico

Cada DatasetBuilder definido en TFDS viene con una versión, por ejemplo:

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

La versión sigue a Semantic Versioning 2.0.0 : MAJOR.MINOR.PATCH . El propósito de la versión es poder garantizar la reproducibilidad: cargar un conjunto de datos dado en una versión fija produce los mismos datos. Más específicamente:

  • Si se incrementa la versión PATCH , los datos leídos por el cliente son los mismos, aunque los datos se pueden serializar de manera diferente en el disco o los metadatos pueden haber cambiado. Para cualquier segmento dado, la API de corte devuelve el mismo conjunto de registros.
  • Si se incrementa la versión MINOR , los datos existentes leídos por el cliente son los mismos, pero hay datos adicionales (características en cada registro). Para cualquier segmento dado, la API de corte devuelve el mismo conjunto de registros.
  • Si se incrementa la versión MAJOR , los datos existentes se han modificado y / o la API de segmentación no necesariamente devuelve el mismo conjunto de registros para un segmento determinado.

Cuando se realiza un cambio de código en la biblioteca TFDS y ese cambio de código afecta la forma en que el cliente serializa y / o lee un conjunto de datos, la versión del generador correspondiente se incrementa de acuerdo con las pautas anteriores.

Tenga en cuenta que la semántica anterior es el mejor esfuerzo, y puede haber errores no notados que afecten a un conjunto de datos mientras la versión no se incrementó. Tales errores finalmente se corrigen, pero si confía en gran medida en el control de versiones, le recomendamos que use TFDS desde una versión lanzada (en lugar de HEAD ).

También tenga en cuenta que algunos conjuntos de datos tienen otro esquema de versiones independiente de la versión TFDS. Por ejemplo, el conjunto de datos de Open Images tiene varias versiones, y en TFDS, los constructores correspondientes son open_images_v4 , open_images_v5 , ...

Versiones soportadas

Un DatasetBuilder puede admitir varias versiones, que pueden ser más altas o más bajas que la versión canónica. Por ejemplo:

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

La elección de continuar admitiendo una versión anterior se realiza caso por caso, principalmente en función de la popularidad del conjunto de datos y la versión. Finalmente, nuestro objetivo es admitir solo un número limitado de versiones por conjunto de datos, idealmente uno. En el ejemplo anterior, podemos ver que la versión 2.0.0 ya no es compatible, ya que es idéntica a 2.0.1 desde la perspectiva del lector.

Las versiones compatibles con un número mayor que el número de versión canónica se consideran experimentales y pueden romperse. Sin embargo, eventualmente se harán canónicos.

Una versión puede especificar tfds_version_to_prepare . Esto significa que esta versión del conjunto de datos solo se puede usar con la versión actual del código TFDS si ya ha sido preparada por una versión anterior del código, pero no se puede preparar. El valor de tfds_version_to_prepare especifica la última versión conocida de TFDS que se puede usar para descargar y preparar el conjunto de datos en esta versión.

Cargando una versión específica

Al cargar un conjunto de datos o un DatasetBuilder , puede especificar la versión a utilizar. Por ejemplo:

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

Si usa TFDS para una publicación, le recomendamos que:

  • arregle solo el componente MAJOR de la versión ;
  • anuncie qué versión del conjunto de datos se utilizó en sus resultados.

Hacerlo debería facilitarle a su futuro, a sus lectores y revisores reproducir sus resultados.

Los experimentos

Para implementar gradualmente los cambios en TFDS que están afectando a muchos creadores de conjuntos de datos, presentamos la noción de experimentos. Cuando se introdujo por primera vez, un experimento está deshabilitado de manera predeterminada, pero las versiones específicas del conjunto de datos pueden decidir habilitarlo. Por lo general, esto se hará en versiones "futuras" (aún no hechas canónicas) al principio. Por ejemplo:

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

Una vez que se haya verificado que un experimento funciona como se esperaba, se extenderá a todos o la mayoría de los conjuntos de datos, momento en el cual se puede habilitar de manera predeterminada, y la definición anterior se vería así:

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

Una vez que se utiliza un experimento en todas las versiones de los conjuntos de datos (no queda ninguna versión del conjunto de datos que especifique {experiment: False} ), el experimento se puede eliminar.

Los experimentos y su descripción se definen en core/utils/version.py .

BUILDER_CONFIGS y versiones

Algunos conjuntos de datos definen varios BUILDER_CONFIGS . Cuando ese es el caso, la version y las version supported_versions se definen en los propios objetos de configuración. Aparte de eso, la semántica y el uso son idénticos. Por ejemplo:

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