Veri kümeleri sürüm oluşturma

Tanım

Sürüm oluşturma farklı anlamlara gelebilir:

  • TFDS API sürümü (pip sürümü): tfds. version
  • TFDS'den bağımsız, genel veri seti sürümü (örn. Voc2007 , Voc2012). TFDS'de her genel veri kümesi versiyonu bağımsız bir veri kümesi olarak uygulanmalıdır:
  • TFDS'deki veri kümesi oluşturma kodu sürümü ( my_dataset:1.0.0 ): Örneğin, voc/2007 TFDS uygulamasında bir hata bulunursa voc.py oluşturma kodu güncellenecektir ( voc/2007:1.0.0 - > voc/2007:2.0.0 ).

Bu kılavuzun geri kalanı yalnızca son tanıma (TFDS deposundaki veri kümesi kod sürümü) odaklanmaktadır.

Desteklenen sürümler

Genel bir kural olarak:

  • Yalnızca son güncel sürüm oluşturulabilir.
  • Önceden oluşturulmuş tüm veri kümeleri okunabilir (not: Bunun için TFDS 4+ ile oluşturulmuş veri kümeleri gerekir).
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')

anlamsal

TFDS'de tanımlanan her DatasetBuilder bir sürümle birlikte gelir; örneğin:

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',
  }

Sürüm, Anlamsal Sürüm Oluşturma 2.0.0'ı takip etmektedir: MAJOR.MINOR.PATCH . Versiyonun amacı tekrarlanabilirliği garanti edebilmektir: belirli bir veri setini sabit bir versiyona yüklemek aynı verileri verir. Daha spesifik olarak:

  • PATCH sürümü artırılırsa, istemci tarafından okunan veriler aynıdır, ancak veriler diskte farklı şekilde serileştirilmiş olabilir veya meta veriler değişmiş olabilir. Herhangi bir dilim için dilimleme API'si aynı kayıt kümesini döndürür.
  • MINOR sürüm artırılırsa, istemci tarafından okunan mevcut veriler aynıdır ancak ek veriler vardır (her kayıtta özellikler). Herhangi bir dilim için dilimleme API'si aynı kayıt kümesini döndürür.
  • MAJOR sürümü artırılırsa mevcut veriler değişmiştir ve/veya dilimleme API'sinin belirli bir dilim için aynı kayıt kümesini döndürmesi gerekmez.

TFDS kitaplığında bir kod değişikliği yapıldığında ve bu kod değişikliği, veri kümesinin serileştirilme ve/veya istemci tarafından okunma şeklini etkilediğinde, karşılık gelen oluşturucu sürümü yukarıdaki yönergelere göre artırılır.

Yukarıdaki anlambilimin en iyi çaba olduğunu ve sürüm artırılmadığı sırada veri kümesini etkileyen fark edilmeyen hatalar olabileceğini unutmayın. Bu tür hatalar eninde sonunda düzeltilir, ancak sürüm oluşturmaya çok güveniyorsanız, TFDS'yi yayınlanmış bir sürümden ( HEAD yerine) kullanmanızı öneririz.

Ayrıca bazı veri kümelerinin TFDS sürümünden bağımsız başka bir sürüm oluşturma şemasına sahip olduğunu unutmayın. Örneğin, Open Images veri kümesinin çeşitli versiyonları vardır ve TFDS'de karşılık gelen oluşturucular open_images_v4 , open_images_v5 , ...'dir.

Belirli bir sürümün yüklenmesi

Bir veri kümesini veya DatasetBuilder yüklerken kullanılacak sürümü belirtebilirsiniz. Örneğin:

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

Bir yayın için TFDS kullanıyorsanız şunları yapmanızı öneririz:

  • yalnızca sürümün MAJOR bileşenini düzeltin ;
  • Sonuçlarınızda veri kümesinin hangi sürümünün kullanıldığının reklamını yapın.

Bunu yapmak gelecekteki kendinizin, okuyucularınızın ve değerlendiricilerinizin sonuçlarınızı yeniden üretmesini kolaylaştıracaktır.

BUILDER_CONFIGS ve sürümleri

Bazı veri kümeleri birkaç BUILDER_CONFIGS tanımlar. Böyle bir durumda version ve supported_versions yapılandırma nesnelerinin kendisinde tanımlanır. Bunun dışında anlam ve kullanım aynıdır. Örneğin:

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

Deneysel versiyon

Aynı anda 2 versiyonun oluşturulmasına izin vermek mümkündür. Bir varsayılan ve bir deneysel sürüm. Örneğin:

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

Kodda 2 sürümü desteklediğinizden emin olmanız gerekir:

class MNIST(tfds.core.GeneratorBasedBuilder):

  ...

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