বিভক্ত এবং slicing

সমস্ত TFDS ডেটাসেট বিভিন্ন ডেটা স্প্লিট (যেমন 'train' , 'test' ) প্রকাশ করে যা ক্যাটালগে অন্বেষণ করা যেতে পারে।

"অফিসিয়াল" ডেটাসেট বিভাজন ছাড়াও, TFDS স্প্লিট(গুলি) এবং বিভিন্ন সংমিশ্রণের স্লাইস(গুলি) নির্বাচন করার অনুমতি দেয়।

স্লাইসিং API

স্লাইসিং নির্দেশাবলী split= kwarg এর মাধ্যমে tfds.load বা tfds.DatasetBuilder.as_dataset এ উল্লেখ করা হয়েছে।

ds = tfds.load('my_dataset', split='train[:75%]')
builder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')

বিভক্ত হতে পারে:

  • প্লেইন স্প্লিট ( 'train' , 'test' ): বিভক্তের মধ্যে সমস্ত উদাহরণ নির্বাচিত।
  • স্লাইস : স্লাইসগুলিতে পাইথন স্লাইস নোটেশনের মতো একই শব্দার্থ আছে। স্লাইস হতে পারে:
    • পরম ( 'train[123:450]' , train[:4000] ): (পঠিত আদেশ সম্পর্কে সতর্কতার জন্য নীচের নোট দেখুন)
    • শতাংশ ( 'train[:75%]' , 'train[25%:75%]' ): সম্পূর্ণ ডেটাকে 100টি জোড় স্লাইসে ভাগ করুন। ডেটা 100 দ্বারা বিভাজ্য না হলে, কিছু শতাংশ অতিরিক্ত উদাহরণ থাকতে পারে।
    • Shard ( train[:4shard] , train[4shard] ): অনুরোধ করা শার্ডের সমস্ত উদাহরণ নির্বাচন করুন। (বিভাজনের শার্ডের সংখ্যা পেতে info.splits['train'].num_shards দেখুন)
  • বিভাজনের ইউনিয়ন ( 'train+test' , 'train[:25%]+test' ): বিভক্তগুলি একসাথে আন্তঃলিভ করা হবে।
  • সম্পূর্ণ ডেটাসেট ( 'all' ): 'all' হল একটি বিশেষ বিভক্ত নাম যা সমস্ত বিভাজনের মিলনের সাথে সম্পর্কিত ( 'train+test+...' সমতুল্য)।
  • বিভাজনের তালিকা ( ['train', 'test'] ): একাধিক tf.data.Dataset আলাদাভাবে ফেরত দেওয়া হয়:
# Returns both train and test split separately
train_ds, test_ds = tfds.load('mnist', split=['train', 'test[:50%]'])

tfds.even_splits এবং মাল্টি-হোস্ট প্রশিক্ষণ

tfds.even_splits একই আকারের অ-ওভারল্যাপিং সাব-স্প্লিটগুলির একটি তালিকা তৈরি করে।

# Divide the dataset into 3 even parts, each containing 1/3 of the data
split0, split1, split2 = tfds.even_splits('train', n=3)

ds = tfds.load('my_dataset', split=split2)

বিতরণ করা সেটিংয়ে প্রশিক্ষণের সময় এটি বিশেষভাবে কার্যকর হতে পারে, যেখানে প্রতিটি হোস্টের মূল ডেটার একটি স্লাইস পাওয়া উচিত।

Jax এর সাথে, tfds.split_for_jax_process ব্যবহার করে এটি আরও সরলীকৃত করা যেতে পারে:

split = tfds.split_for_jax_process('train', drop_remainder=True)
ds = tfds.load('my_dataset', split=split)

tfds.split_for_jax_process এর জন্য একটি সহজ উপনাম:

# The current `process_index` loads only `1 / process_count` of the data.
splits = tfds.even_splits('train', n=jax.process_count(), drop_remainder=True)
split = splits[jax.process_index()]

tfds.even_splits , tfds.split_for_jax_process ইনপুট হিসাবে যেকোনো বিভক্ত মান গ্রহণ করে (যেমন 'train[75%:]+test' )

স্লাইসিং এবং মেটাডেটা

ডেটাসেট তথ্য ব্যবহার করে বিভক্ত/সাবপ্লিট ( num_examples , file_instructions ,...) সম্পর্কে অতিরিক্ত তথ্য পাওয়া সম্ভব:

builder = tfds.builder('my_dataset')
builder.info.splits['train'].num_examples  # 10_000
builder.info.splits['train[:75%]'].num_examples  # 7_500 (also works with slices)
builder.info.splits.keys()  # ['train', 'test']

ক্রস বৈধতা

স্ট্রিং API ব্যবহার করে 10-গুণ ক্রস-ভ্যালিডেশনের উদাহরণ:

vals_ds = tfds.load('mnist', split=[
    f'train[{k}%:{k+10}%]' for k in range(0, 100, 10)
])
trains_ds = tfds.load('mnist', split=[
    f'train[:{k}%]+train[{k+10}%:]' for k in range(0, 100, 10)
])

যাচাইকরণ ডেটাসেটগুলি প্রতিটি হতে চলেছে 10%: [0%:10%] , [10%:20%] , ..., [90%:100%] । এবং প্রশিক্ষণ ডেটাসেটগুলি প্রতিটি পরিপূরক হতে চলেছে 90%: [10%:100%] (একটি সংশ্লিষ্ট বৈধকরণ সেটের জন্য [0%:10%] ), `[0%:10%]

  • [20%:100%] (for a validation set of [10%:20%]`),...

tfds.core.ReadInstruction এবং রাউন্ডিং

str এর পরিবর্তে, tfds.core হিসাবে বিভাজন পাস করা সম্ভব। tfds.core.ReadInstruction :

উদাহরণস্বরূপ, split = 'train[50%:75%] + test' এর সমতুল্য:

split = (
    tfds.core.ReadInstruction(
        'train',
        from_=50,
        to=75,
        unit='%',
    )
    + tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)

unit হতে পারে:

  • abs : পরম স্লাইসিং
  • % : শতাংশ স্লাইসিং
  • shard : শার্ড স্লাইসিং

tfds.ReadInstruction এরও একটি রাউন্ডিং আর্গুমেন্ট আছে। যদি ডেটাসেটের উদাহরণের সংখ্যা 100 দ্বারা সমানভাবে ভাগ না হয়:

  • rounding='closest' (ডিফল্ট): অবশিষ্ট উদাহরণ শতাংশের মধ্যে বিতরণ করা হয়, তাই কিছু শতাংশে অতিরিক্ত উদাহরণ থাকতে পারে।
  • rounding='pct1_dropremainder' : অবশিষ্ট উদাহরণ বাদ দেওয়া হয়েছে, কিন্তু এই গ্যারান্টি সমস্ত শতাংশে একই সংখ্যক উদাহরণ রয়েছে (যেমন: len(5%) == 5 * len(1%) )।

প্রজননযোগ্যতা এবং নির্ণয়বাদ

প্রজন্মের সময়, একটি প্রদত্ত ডেটাসেট সংস্করণের জন্য, TFDS গ্যারান্টি দেয় যে উদাহরণগুলি ডিস্কে নির্ধারকভাবে এলোমেলো করা হয়েছে। সুতরাং ডেটাসেটটি দুইবার তৈরি করা (2টি ভিন্ন কম্পিউটারে) উদাহরণের ক্রম পরিবর্তন করবে না।

একইভাবে, সাবস্প্লিট API সর্বদা প্ল্যাটফর্ম, আর্কিটেকচার ইত্যাদি নির্বিশেষে উদাহরণের একই set নির্বাচন করবে। এর মানে set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')

যাইহোক, উদাহরণগুলি যে ক্রমে পড়া হয় তা নির্ধারক নাও হতে পারে। এটি অন্যান্য প্যারামিটারের উপর নির্ভর করে (যেমন shuffle_files=True কিনা)।