MetaTrader 5에서 손글씨 숫자를 인식하는 EA 활용하기

Mike 2023.11.23 23:15 53 0 0
첨부파일

손글씨 숫자를 인식하는 전문가 조언기(EA) 소개

MNIST 데이터베이스는 60,000개의 훈련 이미지와 10,000개의 테스트 이미지로 구성되어 있습니다. 이 이미지는 원래의 NIST 세트에서 가져온 20x20 픽셀의 흑백 샘플을 '재혼합'하여 생성된 것으로, 미국 인구조사국에서 제공된 자료와 미국 고등학생들로부터 수집된 샘플들로 보완되었습니다. 샘플은 28x28 픽셀 크기로 정규화되었으며, 그레이스케일 수준을 도입하기 위해 안티 앨리어싱 처리가 이루어졌습니다.

훈련된 손글씨 숫자 인식 모델인 mnist.onnx는 모델 제오(Model Zoo)에서 Github를 통해 다운로드할 수 있습니다 (opset 8). 관심이 있는 분들은 opset 1을 제외한 다른 모델들을 다운로드하고 테스트해볼 수 있습니다. 최근 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의 인식 정확도가 눈에 띄게 낮습니다. 왼쪽으로 기울어진 숫자는 더 정확하게 인식됩니다.

목록
댓글 0