نسخه سازی مجموعه داده ها

تعریف

نسخه سازی می تواند به معانی مختلفی اشاره داشته باشد:

  • نسخه TFDS API (نسخه پیپ): tfds. version
  • نسخه مجموعه داده عمومی، مستقل از TFDS (به عنوان مثال Voc2007 ، Voc2012). در TFDS هر نسخه مجموعه داده عمومی باید به عنوان یک مجموعه داده مستقل پیاده سازی شود:
    • یا از طریق تنظیمات سازنده : به عنوان مثال voc/2007 ، voc/2012
    • یا به عنوان 2 مجموعه داده مستقل: به عنوان مثال wmt13_translate ، wmt14_translate
  • نسخه کد تولید مجموعه داده در TFDS ( my_dataset:1.0.0 ): به عنوان مثال، اگر اشکالی در اجرای TFDS voc/2007 یافت شود، کد تولید voc.py به روز می شود ( voc/2007:1.0.0 - > voc/2007:2.0.0 ).

بقیه این راهنما فقط بر آخرین تعریف (نسخه کد مجموعه داده در مخزن TFDS) تمرکز دارد.

نسخه های پشتیبانی شده

به عنوان یک قانون کلی:

  • فقط آخرین نسخه فعلی را می توان تولید کرد.
  • همه مجموعه داده‌های تولید شده قبلی قابل خواندن هستند (توجه داشته باشید: برای این کار نیاز به مجموعه داده‌های تولید شده با 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')

معنایی

هر DatasetBuilder تعریف شده در TFDS دارای یک نسخه است، به عنوان مثال:

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

نسخه از Semantic Versioning 2.0.0 پیروی می کند: MAJOR.MINOR.PATCH . هدف نسخه این است که بتواند تکرارپذیری را تضمین کند: بارگذاری یک مجموعه داده معین در یک نسخه ثابت، همان داده ها را به دست می دهد. به طور خاص:

  • اگر نسخه PATCH افزایش یابد، داده هایی که توسط مشتری خوانده می شود یکسان است، اگرچه ممکن است داده ها به طور متفاوتی روی دیسک سریال شوند یا ممکن است ابرداده تغییر کرده باشد. برای هر برش معین، API برش همان مجموعه رکوردها را برمی گرداند.
  • اگر نسخه MINOR افزایش یابد، داده های موجود به عنوان خوانده شده توسط مشتری یکسان است، اما داده های اضافی وجود دارد (ویژگی های هر رکورد). برای هر برش معین، API برش همان مجموعه رکوردها را برمی گرداند.
  • اگر نسخه MAJOR افزایش یابد، داده‌های موجود تغییر کرده‌اند و/یا API برش الزاماً مجموعه‌ای از رکوردها را برای یک برش مشخص برمی‌گرداند.

هنگامی که یک تغییر کد در کتابخانه TFDS انجام می‌شود و آن تغییر کد بر نحوه سریال‌سازی و/یا خواندن یک مجموعه داده توسط مشتری تأثیر می‌گذارد، نسخه سازنده مربوطه طبق دستورالعمل‌های بالا افزایش می‌یابد.

توجه داشته باشید که معنای بالا بهترین تلاش است، و ممکن است در حالی که نسخه افزایش نیافته است، اشکالات غیر قابل توجهی روی مجموعه داده تأثیر بگذارد. چنین اشکالاتی در نهایت برطرف می‌شوند، اما اگر به شدت به نسخه‌سازی تکیه می‌کنید، به شما توصیه می‌کنیم از TFDS نسخه منتشر شده (برخلاف HEAD ) استفاده کنید.

همچنین توجه داشته باشید که برخی از مجموعه‌های داده دارای طرح نسخه‌سازی دیگری مستقل از نسخه TFDS هستند. به عنوان مثال، مجموعه داده Open Images دارای چندین نسخه است و در TFDS، سازنده های مربوطه عبارتند از open_images_v4 ، open_images_v5 ، ...

در حال بارگیری یک نسخه خاص

هنگام بارگیری یک مجموعه داده یا DatasetBuilder ، می توانید نسخه مورد استفاده را مشخص کنید. مثلا:

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

اگر از TFDS برای انتشار استفاده می کنید، به شما توصیه می کنیم:

  • فقط مؤلفه MAJOR نسخه را تعمیر کنید .
  • تبلیغ کنید که کدام نسخه از مجموعه داده در نتایج شما استفاده شده است.

انجام این کار باید برای خود آینده شما، خوانندگان و بازبینان شما آسان تر کند که نتایج شما را بازتولید کنند.

BUILDER_CONFIGS و نسخه ها

برخی از مجموعه داده ها چندین BUILDER_CONFIGS را تعریف می کنند. در این صورت، version و supported_versions بر روی خود اشیاء پیکربندی تعریف می‌شوند. به غیر از آن، معناشناسی و کاربرد یکسان هستند. مثلا:

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

نسخه آزمایشی

امکان تولید همزمان 2 نسخه وجود دارد. یک نسخه پیش فرض و یک نسخه آزمایشی. مثلا:

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

در کد، باید مطمئن شوید که از 2 نسخه پشتیبانی می کند:

class MNIST(tfds.core.GeneratorBasedBuilder):

  ...

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