ช่วยปกป้อง Great Barrier Reef กับ TensorFlow บน Kaggle เข้าร่วมท้าทาย

หั่นและหั่น

ทั้งหมด TFDS ชุดข้อมูลที่เปิดเผยข้อมูลแยกต่างๆ (เช่น 'train' , 'test' ) ซึ่งสามารถได้รับการสำรวจใน แคตตาล็อก

นอกเหนือจากการแยกชุดข้อมูล "อย่างเป็นทางการ" แล้ว TFDS ยังอนุญาตให้เลือกส่วนของการแยกและชุดค่าผสมต่างๆ

API สไลซ์

คำแนะนำ Slicing ที่ระบุไว้ใน 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 ไม่ลงตัว บางส่วนอาจมีตัวอย่างเพิ่มเติม
    • 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:

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 ยอมรับกับค่าใด ๆ แยกเป็น input (เช่น '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 : Shard หั่น

tfds.ReadInstruction นอกจากนี้ยังมีการโต้แย้งการปัดเศษ ถ้าจำนวนตัวอย่างในชุดข้อมูลที่ไม่ได้แบ่งเท่า ๆ กันโดย 100 :

  • rounding='closest' (เริ่มต้น): ตัวอย่างที่เหลือจะกระจายในหมู่เปอร์เซ็นต์ดังนั้นร้อยละบางคนอาจจะมีตัวอย่างเพิ่มเติม
  • rounding='pct1_dropremainder' : ตัวอย่างที่เหลือจะลดลง แต่การรับประกันนี้ร้อยละทั้งหมดมีหมายเลขเดียวกันที่แน่นอนของตัวอย่าง (เช่น len(5%) == 5 * len(1%) )

ความสามารถในการทำซ้ำ & การกำหนด

ระหว่างการสร้าง สำหรับรุ่นชุดข้อมูลที่กำหนด TFDS รับประกันว่าตัวอย่างจะถูกสับเปลี่ยนอย่างกำหนดบนดิสก์ ดังนั้น การสร้างชุดข้อมูลสองครั้ง (ในคอมพิวเตอร์ 2 เครื่องที่ต่างกัน) จะไม่เปลี่ยนลำดับตัวอย่าง

ในทำนองเดียวกัน subsplit API มักจะเลือกเดียว set ตัวอย่างโดยไม่คำนึงถึงแพลตฟอร์มสถาปัตยกรรม ฯลฯ นี้หมายถึง set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')

อย่างไรก็ตามลำดับที่ตัวอย่างจะอ่านอาจจะไม่ได้กำหนด ทั้งนี้ขึ้นอยู่กับพารามิเตอร์อื่น ๆ (เช่นว่า shuffle_files=True )