static void Step6() { Console.WriteLine("STEP 6: Evaluate network..."); NetworkEvaluator evaluator = new NetworkEvaluator(); evaluator.Evaluate(DataFilesInfoGetter.NetworkFile, DataFilesInfoGetter.EncogAnalystFile, DataFilesInfoGetter.NormalizedEvaluateFile); }
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(); }
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); } }
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}"); }
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(); }
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(); }