MetaTrader5
ใช้โมเดล ONNX เพื่อจำแนกตัวเลขที่เขียนด้วยมือใน MetaTrader 5
EA ที่สามารถจำแนกตัวเลขที่เขียนด้วยมือได้ฐานข้อมูล MNIST ประกอบด้วยภาพจำนวน 60,000 ภาพสำหรับการฝึกอบรมและ 10,000 ภาพสำหรับการทดสอบ ซึ่งภาพเหล่านี้ถูกสร้างขึ้นโดยการ "รีมิกซ์" ชุดข้อมูล NIST ดั้งเดิมที่มีขนาด 20x20 พิกเซล ขาว-ดำ ที่ได้มาจากสำนักงานสำรวจประชากรของสหรัฐฯ และเพิ่มตัวอย่างการทดสอบที่ได้จากนักเรียนมัธยมในอเมริกา ตัวอย่างถูกปรับขนาดให้เป็น 28x28 พิกเซล พร้อมการลดความหยาบของภาพ ซึ่งทำให้เกิดระดับสีเทาโมเดลการจำแนกตัวเลขที่เขียนด้วยมือที่ฝึกอบรมแล้วคือ mnist.onnx ซึ่งสามารถดาวน์โหลดได้จาก Github ที่ Model Zoo (opset 8) สำหรับผู้ที่สนใจสามารถดาวน์โหลดและลองใช้โมเดลอื่น ๆ ยกเว้นโมเดลที่มี opset 1 ซึ่งไม่ถูกสนับสนุนโดย runtime ONNX ล่าสุด อย่างน่าสนใจคือ เวกเตอร์ผลลัพธ์ไม่ได้ถูกประมวลผลด้วยฟังก์ชัน Softmax ตามที่มักจะทำในโมเดลการจำแนกประเภท แต่นี่ไม่ใช่ปัญหาเพราะเราสามารถทำสิ่งนี้ได้เองอย่างง่ายดายint PredictNumber(void) { static matrixf image(28,28); static vectorf result(10); PrepareMatrix(image); if(!OnnxRun(ExtModel,ONNX_DEFAULT,image,result)) { Print("OnnxRun error ",GetLastError()); return(-1); } result.Activation(result,AF_SOFTMAX); int predict=int(result.ArgMax()); if(result[predict]< 0.8) Print(result); Print("value ",predict," predicted with probability ",result[predict]); return(predict); }คุณสามารถวาดตัวเลขในกริดพิเศษโดยใช้เมาส์ โดยกดปุ่มซ้ายของเมาส์ไว้ จากนั้นเพื่อจำแนกตัวเลขที่วาดขึ้น ให้กดปุ่ม CLASSIFY หากความน่าจะเป็นที่ได้จากการจำแนกตัวเลขต่ำกว่า 0.8 เวกเตอร์ผลลัพธ์ที่แสดงความน่าจะเป็นสำหรับแต่ละคลาสจะถูกพิมพ์ลงในบันทึก เช่น ลองจำแนกฟิลด์ข้อมูลที่ว่างเปล่า[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267]value 5 predicted with probability 0.11471312493085861น่าสนใจว่า ความแม่นยำในการจำแนกหมายเลข 9 (9) จะต่ำกว่าจำนวนอื่น ๆ โดยเฉพาะตัวเลขที่มีแนวเอียงไปทางซ้ายจะถูกจำแนกได้แม่นยำมากกว่า
2023.11.23