डेटासेट संस्करणीकरण

परिभाषा

वर्जनिंग अलग-अलग अर्थों को संदर्भित कर सकता है:

  • टीएफडीएस एपीआई संस्करण (पीआईपी संस्करण): tfds. version
  • सार्वजनिक डेटासेट संस्करण, TFDS से स्वतंत्र (जैसे Voc2007 , Voc2012)। टीएफडीएस में प्रत्येक सार्वजनिक डेटासेट संस्करण को एक स्वतंत्र डेटासेट के रूप में लागू किया जाना चाहिए:
    • या तो बिल्डर कॉन्फ़िगरेशन के माध्यम से: उदाहरण के लिए voc/2007 , voc/2012
    • या तो 2 स्वतंत्र डेटासेट के रूप में: उदाहरण के लिए wmt13_translate , wmt14_translate
  • TFDS में डेटासेट जेनरेशन कोड संस्करण ( my_dataset:1.0.0 ): उदाहरण के लिए, यदि voc/2007 के TFDS कार्यान्वयन में कोई बग पाया जाता है, तो voc.py जेनरेशन कोड अपडेट किया जाएगा ( voc/2007:1.0.0 - > voc/2007:2.0.0 ).

इस गाइड का बाकी हिस्सा केवल अंतिम परिभाषा (टीएफडीएस रिपॉजिटरी में डेटासेट कोड संस्करण) पर केंद्रित है।

समर्थित संस्करण

सामान्य नियम यही है:

  • केवल अंतिम वर्तमान संस्करण ही तैयार किया जा सकता है।
  • पहले से जेनरेट किए गए सभी डेटासेट को पढ़ा जा सकता है (नोट: इसके लिए 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 एक संस्करण के साथ आता है, उदाहरण के लिए:

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 संस्करण बढ़ाया गया है, तो मौजूदा डेटा बदल दिया गया है और/या स्लाइसिंग एपीआई किसी दिए गए स्लाइस के लिए रिकॉर्ड के समान सेट को वापस नहीं लौटाता है।

जब टीएफडीएस लाइब्रेरी में एक कोड परिवर्तन किया जाता है और वह कोड परिवर्तन क्लाइंट द्वारा डेटासेट को क्रमबद्ध करने और/या पढ़ने के तरीके को प्रभावित करता है, तो संबंधित बिल्डर संस्करण को उपरोक्त दिशानिर्देशों के अनुसार बढ़ाया जाता है।

ध्यान दें कि उपरोक्त सिमेंटिक सर्वोत्तम प्रयास है, और संस्करण में वृद्धि नहीं होने पर डेटासेट को प्रभावित करने वाले अनदेखे बग हो सकते हैं। ऐसे बग अंततः ठीक कर दिए जाते हैं, लेकिन यदि आप वर्जनिंग पर बहुत अधिक भरोसा करते हैं, तो हम आपको जारी किए गए संस्करण ( HEAD के विपरीत) से 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.*.*')

यदि किसी प्रकाशन के लिए टीएफडीएस का उपयोग किया जा रहा है, तो हम आपको सलाह देते हैं:

  • केवल संस्करण के 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:
      ...