การจำลองเทนเซอร์ใน Mojo
รูปร่าง ระยะก้าว และการจัดวางสมาชิก
การจำลองเทนเซอร์ใน Mojo เป็นบทเรียน Mojo Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Mojo Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Mojo Academy มีบทเรียนทั้งหมด 4 บทเรียน
Tensor คืออะไร
เทนเซอร์คือตารางตัวเลขแบบ n มิติ เวกเตอร์มี 1 มิติ เมทริกซ์มี 2 มิติ และกลุ่มรูปภาพมักมี 4 มิติ
หน่วยความจำแบบแบนที่อยู่เบื้องหลัง
ไม่ว่าคุณจะจินตนาการกี่มิติ จริง ๆ แล้วเทนเซอร์จัดเก็บอยู่ใน บัฟเฟอร์ค่าเดียวแบบแบนในหน่วยความจำ โดยเรียงต่อกันไป
var data = List[Float32](0, 1, 2, 3, 4, 5)รูปร่างอธิบายตาราง
รูปร่างคือชุดขนาดที่มีหนึ่งค่าต่อหนึ่งมิติ รูปร่าง (2, 3) หมายถึงสองแถว แต่ละแถวมีสามคอลัมน์
var shape = (2, 3) # 2 rows, 3 colsดัชนีเลือกสมาชิก
คุณระบุสมาชิกด้วย ดัชนีหนึ่งตัวต่อหนึ่งมิติ ในเทนเซอร์ (2, 3), (1, 2) หมายถึงคอลัมน์สุดท้ายของแถวที่สอง
สเตรดเชื่อมโยงกับหน่วยความจำ
สเตรดบอกว่าต้องข้ามช่องแบบแบนกี่ช่องเพื่อเลื่อนไปหนึ่งตำแหน่งตามมิติหนึ่ง สเตรดเปลี่ยนดัชนีให้เป็นออฟเซ็ตเดียว
var strides = (3, 1) # row jump 3, col jump 1สูตรออฟเซ็ต
ทำดัชนีใด ๆ ให้เป็นแบบแบนด้วยผลคูณจุด: ออฟเซ็ตเท่ากับผลรวมของดัชนีแต่ละตัวคูณด้วยสเตรด ออฟเซ็ตนั้นจะชี้ไปยังช่องที่ถูกต้อง
offset = i * strides[0] + j * strides[1]การจัดวางแบบแถวหลัก
โค้ดตัวเลขของ Mojo มักจัดเก็บแถวให้ต่อเนื่องกัน ซึ่งเรียกว่า แบบแถวหลัก มิติสุดท้ายมีสเตรดเป็น 1 ดังนั้นคอลัมน์จึงอยู่ติดกัน
เหตุใดสเตรดจึงทรงพลัง
ด้วยสเตรดที่ออกแบบอย่างชาญฉลาด คุณสามารถมอง ดูบางส่วน หรือสลับแกนของเทนเซอร์ได้โดยไม่ต้องคัดลอกข้อมูล มีเพียง สเตรดที่เปลี่ยน ไม่ใช่บัฟเฟอร์
ชนิดข้อมูลของสมาชิกมีความสำคัญ
เทนเซอร์ทุกตัวมี ชนิดข้อมูลที่ตายตัว เช่น Float32 หรือ Int64 ชนิดข้อมูลเดียวกันทั้งชุดช่วยให้ Mojo จัดเก็บค่าได้แน่นและคำนวณได้รวดเร็ว
alias dtype = DType.float32โครงสร้าง Tensor ขั้นต่ำ
คุณสามารถจำลองเทนเซอร์เป็นโครงสร้างที่รวม พอยน์เตอร์ข้อมูลเข้ากับรูปร่างและสเตรด เพื่อเก็บข้อมูลเค้าโครงไว้ในที่เดียว
struct Tensor:
var data: UnsafePointer[Float32]
var shape: (Int, Int)
var strides: (Int, Int)แบบต่อเนื่องเทียบกับแบบมีสเตรด
เทนเซอร์แบบ ต่อเนื่อง ไม่มีช่องว่าง จึงสแกนแบบเชิงเส้นได้อย่างรวดเร็ว ส่วนมุมมองแบบมีสเตรดอาจข้ามตำแหน่งไปมา ทำให้การเข้าถึงหน่วยความจำช้าลงได้
ตรวจสอบอย่างรวดเร็ว
คุณมีเทนเซอร์แบบเรียงตามแถวขนาด (2, 3) จะเข้าถึงสมาชิก (1, 2) ได้อย่างไร
ทบทวน
เทนเซอร์ คือบัฟเฟอร์แบบแบนที่มีรูปร่างและสเตรดร่วมกัน สูตรคำนวณออฟเซ็ตใช้จับคู่ดัชนีกับหน่วยความจำ และการเรียงตามแถวจะทำให้คอลัมน์อยู่ติดกัน 🧮
คำถามที่พบบ่อย
บทเรียน “การจำลองเทนเซอร์ใน Mojo” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจำลองเทนเซอร์ใน Mojo” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Mojo Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Mojo Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจำลองเทนเซอร์ใน Mojo”
รูปร่าง ระยะก้าว และการจัดวางสมาชิก คุณปฏิบัติ Mojo Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Mojo Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Mojo Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การจำลองเทนเซอร์ใน Mojo” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Mojo Academy นี้ได้ไหม
ได้ บทเรียน Mojo Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจำลองเทนเซอร์ใน Mojo
- การสร้าง Matmul ทีละขั้นตอน
- การปรับปรุงผลคูณภายใน
- การตรวจสอบความถูกต้องเชิงตัวเลข