Пример #1
0
        public static void UserValidation()
        {
            NN nn = new NN(); double[,] image; int correct;

            //Some user validation code

            image   = Reader.ReadNextImage();
            correct = Reader.ReadNextLabel();
            //Backprop again for averaging
            nn.Calculate(image);

            //Print out various things
            int guess = 0; double certainty = 0;

            //yeah, yeah, this SHOULD be a NN method, not public and used here but I'm tired right now
            //Is a calculation of r^2 error
            for (int i = 0; i < 10; i++)
            {
                if (nn.OutputValues[i] > certainty)
                {
                    certainty = nn.OutputValues[i]; guess = i;
                }
            }
            //Calculate the moving average of the percentage of trials correct of those written to console
            double error = 0;

            for (int i = 0; i < NN.OutputCount; i++)
            {
                error += ((i == correct ? 1d : 0d) - nn.OutputValues[i]) * ((i == correct ? 1d : 0d) - nn.OutputValues[i]);
            }
            iterator++;
            avgerror = ((iterator / (iterator + 1)) * avgerror) + ((1 / iterator) * error);
            avg      = (avg * (iterator / (iterator + 1))) + ((guess == correct) ? (1 / iterator) : 0d);

            //Some safety code which is currently disabled
            //if (avgerror > maxavg && iterator > 300) { maxavg = avgerror; }
            //if (avgerror > maxavg * 10 && iterator > 300) { finished = true; }

            //Print various things to the console for verification that things are nominal
            Console.WriteLine("Correct: " + correct + " Guess: " + guess + " Correct? " + (guess == correct ? "1 " : "0 ") + "Certainty: " + Math.Round(certainty, 5).ToString().PadRight(7)
                              + " %Correct: " + Math.Round(avg, 5).ToString().PadRight(7) + " Avg error: " + Math.Round(avgerror, 5).ToString().PadRight(8) + " Avg gradient: " + NN.AvgGradient, 15);

            //Dispose of the neural network (may not be necessary)
            nn.Dispose();
            //Reset the console data every few iterations to ensure up to date numbers
            if (iterator > 1000)
            {
                iterator = 100; NN.Epoch++;
            }
        }
Пример #2
0
        public static void Testing()
        {
            NN nn = new NN();

            while (iterator < 9000)
            {
                iterator++;
                nn.Calculate(Reader.ReadNextImage());
                int    correct = Reader.ReadNextLabel();
                double certainty = -99d; int guess = -1;
                for (int i = 0; i < 10; i++)
                {
                    if (nn.OutputValues[i] > certainty)
                    {
                        certainty = nn.OutputValues[i]; guess = i;
                    }
                }
                avg = (avg * (iterator / (iterator + 1))) + ((guess == correct) ? (1 / iterator) : 0d);
                Console.WriteLine("Correct: " + correct + " Correct? " + (guess == correct ? "1 " : "0 ") + " %Correct: " + Math.Round(avg, 10).ToString().PadRight(12) + " Certainty " + Math.Round(certainty, 10));
                nn.Dispose();
            }
        }