0Pricing
Mojo Academy · บทเรียน

การจำลองเทนเซอร์ใน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การจำลองเทนเซอร์ใน Mojo
  2. การสร้าง Matmul ทีละขั้นตอน
  3. การปรับปรุงผลคูณภายใน
  4. การตรวจสอบความถูกต้องเชิงตัวเลข
← กลับไปที่ Mojo Academy