Пример #1
0
        private void saveMLPState(MultiLayeredPerceptronClassifier mlp, float accuracy)
        {
            MLPState mstate = new MLPState()
            {
                inputNeuronsArr  = mlp.inputNeuronsArr,
                hiddenNeuronsArr = mlp.hiddenNeuronsArr,
                outputNeuronsArr = mlp.outputNeuronsArr,
                weightsArr       = mlp.weightsArr,
                tempWeightsArr   = mlp.tempWeightsArr,
                prevWeightsArr   = mlp.prevWeightsArr,
                inputs           = mlp.inputs,
                outputs          = mlp.outputs,
                hiddenLayers     = mlp.hiddenLayers,
                hiddenNeurons    = mlp.hiddenNeurons,
                meanSqErr        = mlp.meanSqErr,
                epochs           = mlp.epochs,
                error            = mlp.error
            };

            // write the data (overwrites)
            using (var stream = new StreamWriter(MLP_STATE_FILE, append: false)) ///  + "_" + accuracy
            {
                stream.Write(JsonConvert.SerializeObject(mstate));
            }
        }
Пример #2
0
        private void loadMLPState()
        {
            using (var stream = new StreamReader(MLP_STATE_FILE))
            {
                MLPState mstate = JsonConvert.DeserializeObject <MLPState>(stream.ReadToEnd());

                // Load state from file.
                MultiLayeredPerceptronClassifier.CreateFromFile(mstate);
            }
        }
Пример #3
0
        /**
         *  Multilayer perceptron function.
         *
         * @param trainDatasetLimit: Apply limit on training dataset for each character 1 - 275 or -1 for MAX.
         * @throws Exception
         */
        private float runMLP(int trainDatasetLimit)
        {
            List <OCRCharacter> charactersTrain = new List <OCRCharacter>();

            List <OCRCharacter> charactersTest = new List <OCRCharacter>();

            // Load the training file points
            loadDataFromFile(charactersTrain, DATASET_FILE_1, DATASET_FILE_CONTENT_1);

            // Load the training file points from dataset 2 as well.
            loadDataFromFile(charactersTest, DATASET_FILE_2, DATASET_FILE_CONTENT_2);

            int limit = trainDatasetLimit <= 0 ? 280 : trainDatasetLimit;

            List <OCRCharacter> charactersTrainFiltered =
                ResultFilter.Instance.limitResults(charactersTrain, limit);

            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();



            bool saveState = true;

            // Load ready config from file if present.
            if (System.IO.File.Exists(MLP_STATE_FILE))
            {
                loadMLPState();
                saveState = false;
            }

            // Create a static singleton instance
            mlp = MultiLayeredPerceptronClassifier.Instance;

            if (!mlp.isTrained)
            {
                mlp.createNetwork();
                Console.WriteLine("Found number of images: " + charactersTrainFiltered.Count + "\n");
                mlp.trainNetwork(0.04f, 0.01f, 0.4f, charactersTrainFiltered, 500);
            }

            int correct = 0;

            foreach (OCRCharacter entry in charactersTest)
            {
                correct += mlp.recallNetwork(entry) ? 1 : 0;
            }

            stopwatch.Stop();
            long estimatedTime = stopwatch.ElapsedMilliseconds; //System.nanoTime() - startTime;

            // Show accuracy results.
            Console.WriteLine(correct + " / " + charactersTest.Count);

            float accuracy = (float)(correct * 100) / charactersTest.Count;

            Console.WriteLine(accuracy + " % accuracy.");

            // Time elapsed
            Console.WriteLine("Execution time is " + ((float)estimatedTime / 1000000000).ToString("#0.000") + " seconds");

            // Save to file, to avoid long load time.
            if (saveState)
            {
                saveMLPState(mlp, accuracy);
            }
            /// saveMLPState(mlp, accuracy);

            return(accuracy);
        }