Exemplo n.º 1
0
        static void TestNN(MultiLayerNetwork nw, List <GradeDigest> testDigests, int run)
        {
            List <Tuple <bool, double> > results = new List <Tuple <bool, double> >();

            foreach (var gd in testDigests)
            {
                double[] output = new double[4];
                nw.NetOUT(NNUtils.ToNetworkInput(GradeDigest.UnpackBits(gd.data)), out output);

                int    ans        = inputCodes[NNUtils.Answer(output)];
                double certainity = NNUtils.AnswerConfidence(output);
                results.Add(new Tuple <bool, double>(ans == gd.grade, certainity));
            }

            double confidenceThreshold = results.Select(t => t.Item2).OrderBy(x => x).ElementAt((int)Math.Floor(results.Count * 0.95));

            confidenceThreshold = 0.0001;

            int testSuccess = 0;
            int testFailure = 0;

            int sureTestSuccess = 0;
            int sureTestFailure = 0;
            int unsure          = 0;

            foreach (var res in results)
            {
                if (res.Item1)
                {
                    testSuccess++;
                }
                else
                {
                    testFailure++;
                }

                if (res.Item2 > confidenceThreshold)
                {
                    unsure++;
                }
                else if (res.Item1)
                {
                    sureTestSuccess++;
                }
                else
                {
                    sureTestFailure++;
                }
            }


            Func <int, double> perc = x => ((double)x / testDigests.Count * 100);

            Console.WriteLine("Test results (r/w%): {0:F2}/{1:F2}", perc(testSuccess), perc(testFailure));
            Console.WriteLine("Test results (r/u/w%): {0:F2}/{1:F2}/{2:F2} (confidence threshold = {3})",
                              perc(sureTestSuccess), perc(unsure), perc(sureTestFailure), confidenceThreshold);

            nw.SaveNW(String.Format("e:/Pronko/prj/Grader/ocr-data/grade-recognition_{0}_{1:F2}_{2:F2}.nn",
                                    run, perc(testSuccess), perc(sureTestFailure)));
        }
Exemplo n.º 2
0
        public static RecognitionResult RecognizeGrade(GradeDigest digest)
        {
            List <int> gradeCodes = new List <int> {
                2, 3, 4, 5
            };

            double[] output = new double[4];
            gradeRecognitionNetwork.NetOUT(NNUtils.ToNetworkInput(GradeDigest.UnpackBits(digest.data)), out output);
            return(new RecognitionResult(
                       grade: gradeCodes[NNUtils.Answer(output)],
                       confident: NNUtils.AnswerConfidence(output) < recognitionConfidenceThreshold
                       ));
        }