إصدار مجموعات البيانات

تعريف

يمكن أن يشير الإصدار إلى معنى مختلف:

  • إصدار TFDS API (إصدار النقطة): tfds. version
  • إصدار مجموعة البيانات العامة، مستقل عن TFDS (على سبيل المثال Voc2007 ، Voc2012). في TFDS، يجب تنفيذ كل إصدار من مجموعة البيانات العامة كمجموعة بيانات مستقلة:
    • إما من خلال تكوينات المنشئ : على سبيل المثال voc/2007 , voc/2012
    • إما كمجموعتي بيانات مستقلتين: على سبيل المثال 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',
  }

الإصدار يتبع الإصدار الدلالي 2.0.0 : MAJOR.MINOR.PATCH . الغرض من الإصدار هو أن تكون قادرًا على ضمان إمكانية التكرار: يؤدي تحميل مجموعة بيانات معينة بإصدار ثابت إلى نفس البيانات. اكثر تحديدا:

  • إذا تمت زيادة إصدار PATCH ، فإن البيانات التي يقرأها العميل هي نفسها، على الرغم من أنه قد يتم إجراء تسلسل للبيانات بشكل مختلف على القرص، أو ربما تكون بيانات التعريف قد تغيرت. بالنسبة لأي شريحة معينة، تقوم واجهة برمجة التطبيقات للتقطيع بإرجاع نفس مجموعة السجلات.
  • إذا تمت زيادة الإصدار MINOR ، فإن البيانات الموجودة كما قرأها العميل هي نفسها، ولكن هناك بيانات إضافية (ميزات في كل سجل). بالنسبة لأي شريحة معينة، تقوم واجهة برمجة التطبيقات للتقطيع بإرجاع نفس مجموعة السجلات.
  • إذا تمت زيادة الإصدار MAJOR ، فقد تم تغيير البيانات الموجودة و/أو لا تقوم واجهة برمجة تطبيقات التقطيع بالضرورة بإرجاع نفس مجموعة السجلات لشريحة معينة.

عندما يتم إجراء تغيير التعليمات البرمجية على مكتبة 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.*.*')

النسخة التجريبية

من الممكن السماح بإنشاء نسختين في نفس الوقت. نسخة افتراضية واحدة ونسخة تجريبية واحدة. على سبيل المثال:

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

في الكود، عليك التأكد من دعم الإصدارين:

class MNIST(tfds.core.GeneratorBasedBuilder):

  ...

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