کمک به حفاظت از دیواره بزرگ مرجانی با TensorFlow در Kaggle اضافه کردن چالش

تقسیم و برش

همه مجموعه داده TFDS معرض انشعابات داده های مختلف (به عنوان مثال 'train' ، 'test' ) است که می تواند در بررسی اضافه کردن کاتولوگ .

علاوه بر تقسیم داده های "رسمی"، TFDS امکان انتخاب برش(های) از تقسیم(ها) و ترکیب های مختلف را می دهد.

Slicing API

دستورالعمل برش در مشخص tfds.load یا tfds.DatasetBuilder.as_dataset از طریق split= kwarg.

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 بخش‌پذیر نباشند، ممکن است چند درصد شامل نمونه‌های اضافی باشد.
    • سفال ( 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 است:

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

tfds.even_splits می پذیرد در هر مقدار تقسیم به عنوان ورودی (به عنوان مثال 'train[75%:]+test' )

برش و ابرداده

این ممکن است برای دریافت اطلاعات بیشتر در مورد انشعابات / subsplits ( 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']

اعتبار سنجی متقابل

نمونه هایی از اعتبارسنجی متقابل 10 برابری با استفاده از رشته API:

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.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 subsplit همیشه انتخاب را به همان set این میانگین نمونه، صرف نظر از پلت فرم، معماری، و غیره set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]') .

با این حال، نظم که در آن مثال ها به عنوان خوانده شده ممکن است قطعی. این بستگی به پارامترهای دیگر (به عنوان مثال آیا shuffle_files=True ).