static void Step6()
        {
            Console.WriteLine("STEP 6: Evaluate network...");
            NetworkEvaluator evaluator = new NetworkEvaluator();

            evaluator.Evaluate(DataFilesInfoGetter.NetworkFile, DataFilesInfoGetter.EncogAnalystFile, DataFilesInfoGetter.NormalizedEvaluateFile);
        }
示例#2
0
        static void Main(string[] args)
        {
            NetworkConfiguration configuration = new NetworkConfiguration()
            {
                DetectionValue      = 1.0,
                Epochs              = 100000,
                LearningCoefficient = 0.00001,
                Momentum            = 0.9,
                Name                       = "",
                NoDetectionValue           = 0.0,
                Seed                       = 0,
                WeightInitialisationMethod = RandomType.Linear,
                WeightInitialisationSize   = 1.0
            };

            NetworkEvaluator evaluator = new NetworkEvaluator();

            evaluator.Evaluate(configuration);
            //tests = new Queue<NetworkConfiguration>(NetworkConfiguration.Read());

            //new Thread(TestConfiguration).Start();
            //new Thread(TestConfiguration).Start();
            //new Thread(TestConfiguration).Start();
            //new Thread(TestConfiguration).Start();


            Console.ReadLine();
        }
示例#3
0
        static void TestConfiguration()
        {
            NetworkEvaluator evaluator = new NetworkEvaluator();

            while (true)
            {
                NetworkConfiguration configuration;
                lock (tests)
                {
                    if (tests.Count == 0)
                    {
                        break;
                    }
                    configuration = tests.Dequeue();
                }
                Console.WriteLine("[{0}] Starting test of {1}", DateTime.Now, configuration.Name);
                evaluator.Evaluate(configuration);
            }
        }
示例#4
0
        private void TestInitialAccuracy(NetworkEvaluator networkEvaluator, NativeSlice2D <float> tempResult)
        {
            float totalError   = 0.0f;
            int   totalCorrect = 0;

            for (int i = 0; i < _dataset.TestingSetSize; i++)
            {
                _dataset.GetTestCase(i, out var trainingInput, out var trainingResult);
                networkEvaluator.Evaluate(trainingInput, tempResult, 1).Complete();

                //var error = Math.Abs(tempResult[0] - trainingResult[0, 0]);
                var  error      = CrossEntropyCost(tempResult[0, 0], trainingResult[0, 0]);
                bool wasCorrect = error < 0.5f;
                totalCorrect += wasCorrect ? 1 : 0;
                totalError   += error;
            }

            float averageError = totalError / (float)_dataset.TestingSetSize;
            float accuracy     = (float)totalCorrect / (float)_dataset.TestingSetSize;

            //Forward test
            Debug.Log($"Initial: Accuracy:{accuracy:P2}  Average Error:{averageError:F4}");
        }
示例#5
0
        private IEnumerator TrainingProcess()
        {
            var neuralNetworkConfig = new NetworkDescription()
            {
                Layers = new List <LayerParamaters>()
                {
                    new LayerParamaters()
                    {
                        LayerType   = ELayerType.Input,
                        NeuronCount = InputAttributeCount,
                        NeuronType  = ENeruonType.Input
                    },
                    new LayerParamaters()
                    {
                        LayerType   = ELayerType.Hidden,
                        NeuronCount = 64,
                        NeuronType  = ENeruonType.Sigmoid
                    },
                    new LayerParamaters()
                    {
                        LayerType   = ELayerType.Hidden,
                        NeuronCount = 16,
                        NeuronType  = ENeruonType.Sigmoid
                    },
                    new LayerParamaters()
                    {
                        LayerType   = ELayerType.Output,
                        NeuronCount = 1,
                        NeuronType  = ENeruonType.Sigmoid
                    },
                }
            };

            var neuralNetwork = new NeuralNetwork(neuralNetworkConfig);

            neuralNetwork.InitNetworkWithRandomValues(-0.05f, 0.05f);

            var networkEvaluator = new NetworkEvaluator(neuralNetwork);


            var tempResult = new NativeArray2D <float>(1, 1);

            //Test inital accuracy
            TestInitialAccuracy(networkEvaluator, tempResult.Slice());

            //Learn over a number of iterations
            for (int epoch = 0; epoch < Epochs; epoch++)
            {
                //For each epoch, perform training
                for (int tc = 0; tc < _dataset.TrainingSetSize; tc++)
                {
                    _dataset.GetTrainingCase(tc, out var trainingInput, out var trainingResult);

                    //Evolve network
                    var jobHandle = networkEvaluator.GradientDescentBackpropigate(trainingInput, trainingResult, 1, out _);
                    jobHandle.Complete();
                }

                float totalError   = 0.0f;
                int   totalCorrect = 0;

                for (int i = 0; i < _dataset.TestingSetSize; i++)
                {
                    _dataset.GetTestCase(i, out var trainingInput, out var trainingResult);
                    networkEvaluator.Evaluate(trainingInput, tempResult.Slice(), 1).Complete();

                    var  error      = Math.Abs(tempResult[0, 0] - trainingResult[0, 0]);
                    bool wasCorrect = error < 0.5f;
                    totalCorrect += wasCorrect ? 1 : 0;
                    totalError   += error;
                }

                float averageError = totalError / (float)_dataset.TestingSetSize;
                float accuracy     = (float)totalCorrect / (float)_dataset.TestingSetSize;

                //Forward test
                Debug.Log($"Epoch {epoch}: Accuracy:{accuracy:P2}  Average Error:{averageError:F4}");

                yield return(null);
            }

            tempResult.BackingStore.Dispose();
        }
示例#6
0
        static void Main(string[] args)
        {
            //Set the path of the file containing the data set
            //string dataFilePath = @"C:\Users\kevin\Desktop\squaredtest.csv"; NutrioxDataset
            string dataFilePath = @"C:\Users\Bruker\Desktop\NutrioxDataset.csv";

            //string dataFilePath = @"C:\Users\Bruker\Desktop\-5to5-200Rows.csv";

            //Create a new data set
            DataSet.DataSet dataSet = new DataSet.DataSet(dataFilePath, true);

            //Apply desired data preprocessing to the data set
            dataSet.PreProcessDataSet(NormalizationType.MinMax, 2, EncodingType.None, null);

            //Create a model hyperparameter layer structure
            LayerStructure layerStructure = new LayerStructure()
            {
                numberOfInputNodes = 2, HiddenLayerList = new List <int> {
                    5, 5
                }, numberOfOutputNodes = 1
            };

            //Create an instance of the desired optimalization strategy to use

            var regularizationStrategyFactory = new RegularizationStrategyFactory();
            StochasticGradientDescent SGD     = new StochasticGradientDescent(new SigmoidFunction(), new IdentityFunction(), new MeanSquaredError(), RegularizationType.None, regularizationStrategyFactory);

            //Create training hyperparameters
            TrainingParameters trainingParams = new TrainingParameters()
            {
                epochs = 500, learningRate = 0.01, momentum = 0.01, RegularizationLambda = 0.00
            };

            //Create an instance of a neural network
            //ArtificialNeuralNetwork ann = new ArtificialNeuralNetwork(layerStructure, trainingParams, dataSet, SGD, new GaussianDistribution());

            //Or Load a Network from XML

            XML xml = new XML();

            ArtificialNeuralNetwork ann = xml.LoadNetwork(@"C:\Users\Bruker\Desktop\BestNet.xml", dataSet) as ArtificialNeuralNetwork;

            //Apply the desired training/test data set split ratios.
            ann.SplitDataSetIntoTrainAndTestSets(0.7);

            //Initiate network training
            //ann.TrainNetwork();

            var crossValidationStrategyFactory = new CrossValidationStrategyFactory();
            NetworkEvaluator evaluator         = new NetworkEvaluator(ann);
            CrossValidator   crossValidator    = new CrossValidator(ann, evaluator, crossValidationStrategyFactory);

            //Cross-validate the fitted model
            //crossValidator.KFold(10, 0.007);

            //Evaluate the fitted model on the test set
            evaluator.EvaluateNetwork(0.007);


            //--Optional--//

            //Serialize and save the fitted model

            //XML xml = new XML();
            //xml.SaveNetwork(dataFilePath, ann);

            //Extract model information

            //ann.SaveListOfErrors();

            //ann.GetApproximatedFunction(ann.SavePath + "/Function.txt");

            Console.ReadLine();
        }