Sigmora
เวิร์กโฟลว์

สร้าง Neural Network ด้วย Python เอง ทีละขั้นตอน

03
ดีบักการเทรน

ดีบักสคริปต์การเทรนที่ล้มเหลว

ไฟล์ Python ของคุณควรเทรนเครือข่ายขนาดเล็ก แต่กลับหยุดทำงานด้วยข้อผิดพลาดหรือพิมพ์ตัวเลขแปลกๆ Sigmora เปิดไฟล์ หาบรรทัดที่สำคัญ รันคำสั่งเทรนของคุณด้วย Shell และแสดงผลลัพธ์จริงในการ์ด เพื่อให้คุณเห็นสิ่งที่เกิดขึ้นแทนการคาดเดา เริ่มต้นด้วยไฟล์เดียว ตัวเอเจนต์ไม่ได้เทรนอะไรเอง เพราะโค้ดของคุณคือผู้เทรน และอาจใช้เวลานานเท่าที่จำเป็น วงจรจะสั้น: อ่าน รัน เปรียบเทียบ เปลี่ยน คุณเลือกโฟลเดอร์ เลือกโหมด และตัดสินใจว่าจะยอมรับการเปลี่ยนแปลงใด ใช้เฉพาะโค้ด ข้อมูล และคอมพิวเตอร์ที่คุณเป็นเจ้าของหรือได้รับอนุญาตให้ใช้ และรักษาการทดลองแต่ละครั้งให้เล็กพอที่จะทำซ้ำได้

01

เปิดโฟลเดอร์

เลือกโฟลเดอร์ทำงานที่เก็บสคริปต์การเทรน ไฟล์ config และ log ของคุณ เครื่องมือไฟล์ทำงานในโฟลเดอร์นี้ และ list_dir แสดงสิ่งที่อยู่ภายใน เก็บข้อมูลที่คุณได้รับอนุญาตให้ใช้ไว้ในที่เดียวกัน เพื่อให้ทุก path ในสคริปต์ของคุณสั้นลง เครื่องมือไฟล์ใช้โฟลเดอร์นี้

02

ขอให้อ่าน

ขอให้ Sigmora อ่านสคริปต์การเทรนและอธิบายเลเยอร์ ฟังก์ชัน loss และลูป read_file และ grep จะอ้างถึงบรรทัดที่เกี่ยวข้อง เพื่อให้คุณสามารถตรวจสอบคำอธิบายกับโค้ดของคุณเอง โหมด Plan only ไม่มีการเปลี่ยนแปลงใดๆ ถามอีกครั้งหากบล็อกใดยังไม่ชัดเจน

03

รันคำสั่ง

ระบุคำสั่งเทรนของคุณและเลือกโหมด Shell รันคำสั่งใน Windows, WSL หรือผ่าน SSH บนเซิร์ฟเวอร์ของคุณเอง และการ์ดจะแสดงผลลัพธ์จริงและ exit code ต้องมีการติดตั้ง Python ในสถานที่ที่คำสั่งทำงาน การเทรนอาจใช้เวลานานบนฮาร์ดแวร์ของคุณ

04

ตรวจสอบผลลัพธ์

ขยายการ์ดและอ่านข้อผิดพลาดที่พิมพ์หรือค่า loss ค่า exit code เป็นศูนย์หมายถึงสคริปต์สิ้นสุดโดยไม่มีข้อผิดพลาด ดังนั้นคุณต้องประเมินตัวเลขเอง ข้อมูล validation ที่โมเดลไม่เคยเห็น และบันทึกสิ่งที่พบ จากนั้นตัดสินใจเกี่ยวกับการเปลี่ยนแปลงเล็กๆ ในขั้นตอนถัดไป

ตัวอย่าง: นิวรอนหนึ่งตัวเรียนรู้ AND gate ด้วย Python ธรรมดา

perceptron_and.py
# AND gate: one neuron (perceptron) learns the table
rows = [((0,0),0), ((0,1),0), ((1,0),0), ((1,1),1)]
w = [0.0, 0.0]
b = 0.0
rate = 0.1
for epoch in range(20):
    for x, target in rows:
        total = w[0] * x[0] + w[1] * x[1] + b
        out = 1 if total > 0 else 0
        err = target - out
        w[0] += rate * err * x[0]
        w[1] += rate * err * x[1]
        b += rate * err
print("weights:", w, "bias:", b)

ไฟล์นี้เทรนนิวรอนหนึ่งตัวเพื่อเรียนรู้ AND gate ด้วย learning rate และลูปสั้นๆ ของการอัปเดตน้ำหนัก จากนั้นพิมพ์น้ำหนักและ bias ใช้ Python ธรรมดา ไม่มีไลบรารีและไม่มีตัวเลขสุ่ม ดังนั้นทุกการรันจึงให้ผลลัพธ์เดียวกัน รันด้วย Shell เปลี่ยนจำนวน epochs แล้วรันอีกครั้งเพื่อดูว่าการเปลี่ยนแปลงในน้ำหนักที่พิมพ์คืออะไร

การเดินผ่าน: ติดตามการทดลอง Neural Network แบบ convolutional ด้วย Python

อ่านโค้ดการเทรน

ก่อนจะมีการเปลี่ยนแปลงใดๆ Sigmora จะอ่าน read_file เปิดสคริปต์การเทรนของคุณ list_dir แสดงโฟลเดอร์ข้อมูล และ grep หาบรรทัดที่นิยามเลเยอร์ ฟังก์ชัน loss และลูป คุณเห็นข้อความไฟล์ในการ์ด ดังนั้นคุณสามารถเปรียบเทียบขนาดเลเยอร์กับรูปร่างของข้อมูลของคุณ ตัวเอเจนต์ไม่มีการเปลี่ยนแปลงใดๆ ในขั้นตอนนี้ โมเดล Neural Network ของ logic gates เช่นไฟล์ AND ข้างต้น เป็นการฝึกหัดแรกที่เป็นคลาสสิก และขั้นตอนการอ่านเดียวกันนี้เหมาะสำหรับ Neural Network ที่เขียนด้วย Python ตั้งแต่เริ่มต้นที่คุณเขียนเมื่อเดือนที่แล้วและจำไม่ได้แล้ว ถามเกี่ยวกับบล็อกใดๆ ด้วยคำพูดธรรมดา หรือสลับเป็น Plan only หากคุณต้องการคำอธิบายที่เป็นลายลักษณ์อักษรและไม่มีการกระทำ อ่านคำอธิบายแต่ละคำถัดจากโค้ดและตรวจสอบให้แน่ใจว่าตรงกับสิ่งที่คุณเขียน

รันคำสั่งเทรน

เลือก Auto-run สำหรับการรันที่คุณไว้วางใจ หรือ Ask first หากคุณต้องการอนุมัติการเปลี่ยนแปลงบางอย่าง Shell เริ่มคำสั่งเทรนของคุณ เช่น python perceptron_and.py ในสภาพแวดล้อมที่คุณเลือก และการ์ดแสดงผลลัพธ์จริงและ exit code ขยายการ์ดเพื่ออ่าน log เต็มของสคริปต์ Neural Network แบบ convolutional ด้วย Python ของคุณทีละบรรทัด การเทรนอาจใช้เวลานานเท่าที่จำเป็น และ Sigmora ไม่เร่งความเร็ว เมื่อ loss ไม่ลู่เข้าใน Neural Network log คือที่ที่คุณเห็นสิ่งนั้นก่อน ดูตัวเลข ไม่ใช่แค่ exit code เพราะค่า exit code เป็นศูนย์หมายถึงเพียงว่าสคริปต์เสร็จสิ้น จากนั้นตัดสินใจว่าโค้ดต้องการการเปลี่ยนแปลงหรือไม่ และขอ diff เฉพาะเมื่อจำเป็น

แก้ไขข้อผิดพลาดของรูปร่างหรือ loss ที่ช้า

edit_file เปลี่ยนสคริปต์และแสดง diff ในโหมด Ask first ไม่มีการเขียนจนกว่าคุณจะยอมรับ diff ในขณะที่ Auto-run จะนำไปใช้การเปลี่ยนแปลงทันที ข้อผิดพลาดของรูปร่างมักหมายถึงข้อมูลและเลเยอร์แรกไม่ตรงกัน ดังนั้นการแก้ไขมักเป็นเพียงตัวเลขหนึ่งตัว loss ที่แทบไม่เคลื่อนไหวอาจชี้ไปที่ learning rate, labels ที่ไม่ตรงกับข้อมูล หรือโมเดลที่ยังไม่สามารถ overfit ข้อมูล batch เล็กๆ ลองใช้ batch เล็กๆ นั้นก่อน Overfitting และ underfitting เป็นปัญหาที่แตกต่างกัน ดังนั้นดู training และ validation loss ก่อนที่จะมีการเปลี่ยนแปลงครั้งใหญ่ การสร้าง Neural Network สำหรับหมากรุกเป็นโครงการที่ใหญ่กว่า แต่เริ่มต้นด้วยวิธีเดียวกัน หลังจากแก้ไข รันคำสั่งอีกครั้งด้วย Shell และเปรียบเทียบตัวเลขใหม่กับตัวเลขเก่า

บันทึกผลลัพธ์ไปยังไฟล์ CSV

เพื่อเปรียบเทียบการรัน คุณต้องการตัวเลขในไฟล์ write_file สร้างไฟล์ CSV ในโฟลเดอร์ทำงานของคุณ หรือ append_file เพิ่มหนึ่งแถวต่อ epoch และ read_file โหลดไฟล์อีกครั้งเพื่อให้ตัวเอเจนต์สามารถวางการรัน 2 ครั้งเคียงข้างกันได้ Sigmora ไม่ได้วิเคราะห์ข้อมูลให้คุณ มันบันทึกตัวเลขและแสดงให้คุณเห็น และคุณตัดสินใจว่าตัวเลขเหล่านั้นหมายถึงอะไร แยกข้อมูล validation ออกจากข้อมูลเทรนและเก็บชุดทดสอบไว้จนจบ โหมด Plan only สามารถเขียนการทดลองถัดไปเป็นแผนโดยไม่มีการรันใดๆ เมื่อคุณพร้อม ให้สลับโหมดและปล่อยให้ตัวเอเจนต์ดำเนินการ ก่อนที่จะเก็บผลลัพธ์ เปิดไฟล์ CSV และตรวจสอบว่าแถวตรงกับสิ่งที่การ์ดพิมพ์และแต่ละคอลัมน์มีป้ายกำกับ

Sigmora สำหรับ Windows

ลองใช้เวิร์กโฟลว์กับโปรเจกต์ของคุณเอง

ดาวน์โหลด Sigmora ↗