Deep Learning Academy · บทเรียน

การจัดแบตช์ การสับเปลี่ยน และ num_workers

กำหนดค่า DataLoader เพื่อความเร็ว

บทเรียน 2 จาก 413 ขั้นตอน

การจัดแบตช์ การสับเปลี่ยน และ num_workers เป็นบทเรียน Deep Learning Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Deep Learning Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Deep Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน

พบกับ DataLoader

ชุดข้อมูลส่งตัวอย่างออกมาทีละรายการ แต่การฝึกต้องการข้อมูลเป็นกลุ่ม DataLoaderจะห่อหุ้มชุดข้อมูลของคุณและส่งข้อมูลออกมาเป็นชุดที่สะดวกต่อการใช้งาน 📦

from torch.utils.data import DataLoader
loader = DataLoader(ds)

การแบ่งเป็นชุดช่วยประหยัดเวลา

กำหนดbatch_size แล้วตัวโหลดจะนำตัวอย่างจำนวนดังกล่าวมาซ้อนเป็นเทนเซอร์หนึ่งชุด ชุดที่ใหญ่ขึ้นใช้ฮาร์ดแวร์ได้คุ้มค่ากว่าและช่วยให้การอัปเดตที่มีสัญญาณรบกวนราบรื่นขึ้น

loader = DataLoader(ds, batch_size=32)

หนึ่งชุดซ้อนรวมกัน

แต่ละชุดจะเพิ่มมิติใหม่ไว้ด้านหน้า ตัวอย่าง 32 รายการที่มีรูปร่าง 784 จะกลายเป็นเทนเซอร์เดียวที่มีรูปร่าง 32 คูณ 784 พร้อมให้โมเดลใช้งาน

วนลูปผ่านชุดข้อมูล

คุณวนลูปผ่านตัวโหลดได้เหมือนลำดับใด ๆ ของ Python ในแต่ละรอบ ลูปจะส่งชุดข้อมูลของข้อมูลนำเข้าและป้ายกำกับหนึ่งชุดให้ขั้นตอนการฝึก

for xb, yb in loader:
    pred = model(xb)

สุ่มลำดับใหม่ทุกยุค

การตั้งค่าshuffleเป็น True จะจัดลำดับตัวอย่างใหม่ในแต่ละยุค วิธีนี้ช่วยทำลายลำดับที่เกิดขึ้นโดยบังเอิญ ทำให้โมเดลไม่สามารถจดจำลำดับข้อมูลของคุณได้

loader = DataLoader(ds, batch_size=32, shuffle=True)

สุ่มชุดฝึก ไม่สุ่มชุดทดสอบ

เปิดการสุ่มสำหรับชุดการฝึก แต่ปิดไว้สำหรับการตรวจสอบและการทดสอบ การประเมินมีหน้าที่วัดประสิทธิภาพเท่านั้น ดังนั้นใช้ลำดับคงที่ในส่วนนี้ได้

num_workers โหลดแบบขนาน

การอ่านและถอดรหัสข้อมูลอาจทำให้ GPU ต้องรอ การตั้งค่าnum_workersให้มากกว่าศูนย์จะสร้างกระบวนการช่วยเหลือเพื่อเตรียมชุดถัดไปขณะที่โมเดลกำลังฝึก

loader = DataLoader(ds, batch_size=32, num_workers=4)

เลือกจำนวนตัวช่วยที่เหมาะสม

จุดเริ่มต้นทั่วไปสำหรับnum_workersคือจำนวนแกนประมวลผล CPU ที่คุณมี หากมีมากเกินไปอาจทำให้หน่วยความจำทำงานหนักเกินควร จึงควรวัดผลแทนการเดา

pin_memory ช่วยเร่งการคัดลอกไปยัง GPU

เมื่อฝึกบน GPU ให้ตั้งค่าpin_memoryเป็น True การตั้งค่านี้จะวางชุดข้อมูลไว้ในหน่วยความจำที่ล็อกหน้าไว้ ทำให้การถ่ายโอนไปยังอุปกรณ์เร็วขึ้นอย่างเห็นได้ชัด

loader = DataLoader(ds, batch_size=32, pin_memory=True)

จัดการชุดสุดท้าย

ชุดสุดท้ายมักมีขนาดเล็กกว่าชุดอื่น ใช้drop_lastเป็น True เพื่อละทิ้งชุดนี้เมื่อโมเดลของคุณต้องการให้ทุกชุดมีขนาดเท่ากัน

loader = DataLoader(ds, batch_size=32, drop_last=True)

ใช้ตัวโหลดแยกสำหรับแต่ละส่วน

โดยทั่วไป คุณจะสร้างตัวโหลดแยกสำหรับชุดฝึก ชุดตรวจสอบ และชุดทดสอบ แต่ละตัวมีการตั้งค่าของตนเอง เช่น เปิดการสุ่มเฉพาะชุดฝึก

ตรวจสอบอย่างรวดเร็ว

การตั้งค่า num_workers ให้มากกว่าศูนย์ทำอะไรจริง ๆ

สรุปทบทวน

DataLoaderจะแบ่งชุดข้อมูลของคุณเป็นชุดย่อย สุ่มข้อมูลการฝึก และใช้ num_workers เพื่อโหลดชุดข้อมูลแบบขนาน ทำให้โมเดลมีข้อมูลป้อนอย่างต่อเนื่องและทำงานได้รวดเร็ว 🎉

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “การจัดแบตช์ การสับเปลี่ยน และ num_workers” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดแบตช์ การสับเปลี่ยน และ num_workers” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Deep Learning Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Deep Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดแบตช์ การสับเปลี่ยน และ num_workers”

กำหนดค่า DataLoader เพื่อความเร็ว คุณปฏิบัติ Deep Learning Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Deep Learning Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Deep Learning Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดแบตช์ การสับเปลี่ยน และ num_workers” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Deep Learning Academy นี้ได้ไหม

ได้ บทเรียน Deep Learning Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เขียนคลาสชุดข้อมูลแบบกำหนดเอง
  2. การจัดแบตช์ การสับเปลี่ยน และ num_workers
  3. collate_fn สำหรับอินพุตความยาวต่างกัน
  4. ปรับอินพุตให้เป็นมาตรฐาน
← กลับไปที่ Deep Learning Academy