/// <summary> /// Create, Train and Test a Garden Design Network /// ToDo: Add Dependency Injection /// </summary> private static void CreateGardenDesignNetwork() { //Create the Network INeuralNetworkFactory neuralNetworkFactory = new NeuralNetworkFactory(); var neuralNetwork = neuralNetworkFactory.Create(3, 5, 3); // Train the Network ITrainingDataRepo trainingDataRepo = new TrainingDataRepo(); var trainingData = trainingDataRepo.GetTrainingDataGardenDesign(); INeuralNetworkTrainingService trainingService = new NeuralNetworkTrainingService(new NeuralNetworkProcessingService()); double[][] trainingResults = trainingService.Train(neuralNetwork, trainingData, 4000, new Sigmoid(), 1); OutputResultsToConsole(trainingResults); Console.WriteLine("Training Complete ---------------"); // Test the Trained Network INeuralNetworkProcessingService processingService = new NeuralNetworkProcessingService(); double[] testInputs1 = { 0, 0, 0 }; double[][] testResults1 = { testInputs1, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs1, new Sigmoid()) }; Console.WriteLine("Test1 Results (0, 0, 0 Low Maint(1)) ---------------"); OutputResultsToConsole(testResults1); double[] testInputs2 = { 1, 1, 0 }; double[][] testResults2 = { testInputs2, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs2, new Sigmoid()) }; Console.WriteLine("Test2 Results (1, 1, 0 General(5)) ---------------"); OutputResultsToConsole(testResults2); double[] testInputs3 = { 0, 0, 1 }; double[][] testResults3 = { testInputs3, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs3, new Sigmoid()) }; Console.WriteLine("Test3 Results (0, 0, 1 Child(4)) ---------------"); OutputResultsToConsole(testResults3); }
/// <summary> /// Create, Train and Test an XOR Network /// ToDo: Add Dependency Injection /// </summary> private static void CreateXORNetwork() { //Create the Network // Initiate Weights double[] hiddenLayerWeights = new double[] { 0.38286575972236, 0.441739972420847, 0.00519391335788831, 0.152334728814817 }; double[] hiddenLayerBias = new double[] { 0.79060369394282, 0.25095684418965 }; double[] outputLayerWeights = new double[] { 0.100294556049767, 0.24866028653861 }; double[] outputLayerBias = new double[] { 0.97103805186741 }; INeuralNetworkFactory neuralNetworkFactory = new NeuralNetworkFactory(); var neuralNetwork = neuralNetworkFactory.Create(2, 1, 2, hiddenLayerWeights, outputLayerWeights, hiddenLayerBias, outputLayerBias); // Train the Network ITrainingDataRepo trainingDataRepo = new TrainingDataRepo(); var trainingData = trainingDataRepo.GetTrainingDataXOR(); INeuralNetworkTrainingService trainingService = new NeuralNetworkTrainingService(new NeuralNetworkProcessingService()); double[][] trainingResults = trainingService.Train(neuralNetwork, trainingData, 2000, new Sigmoid(), 1); OutputResultsToConsole(trainingResults); Console.WriteLine("Training Complete ---------------"); // Test the Trained Network INeuralNetworkProcessingService processingService = new NeuralNetworkProcessingService(); double[] testInputs1 = { 0, 0 }; double[][] testResults1 = { testInputs1, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs1, new Sigmoid()) }; Console.WriteLine("Test1 Results (0 XOR 0) ---------------"); OutputResultsToConsole(testResults1); double[] testInputs2 = { 1, 0 }; double[][] testResults2 = { testInputs2, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs2, new Sigmoid()) }; Console.WriteLine("Test2 Results (1 XOR 0) ---------------"); OutputResultsToConsole(testResults2); double[] testInputs3 = { 0, 1 }; double[][] testResults3 = { testInputs3, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs3, new Sigmoid()) }; Console.WriteLine("Test3 Results (0 XOR 1) ---------------"); OutputResultsToConsole(testResults3); double[] testInputs4 = { 1, 1 }; double[][] testResults4 = { testInputs4, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs4, new Sigmoid()) }; Console.WriteLine("Test4 Results (1 XOR 1) ---------------"); OutputResultsToConsole(testResults4); }
/// <summary> /// Create, Train and Test an AND Network /// ToDo: Add Dependency Injection /// </summary> private static void CreateANDNetwork() { //Create the Network (go with random weights and bias) INeuralNetworkFactory neuralNetworkFactory = new NeuralNetworkFactory(); var neuralNetwork = neuralNetworkFactory.Create(2, 1, 2); // Train the Network ITrainingDataRepo trainingDataRepo = new TrainingDataRepo(); var trainingData = trainingDataRepo.GetTrainingDataAND(); INeuralNetworkTrainingService trainingService = new NeuralNetworkTrainingService(new NeuralNetworkProcessingService()); double[][] trainingResults = trainingService.Train(neuralNetwork, trainingData, 2000, new Sigmoid(), 1); OutputResultsToConsole(trainingResults); Console.WriteLine("Training Complete ---------------"); // Test the Trained Network INeuralNetworkProcessingService processingService = new NeuralNetworkProcessingService(); double[] testInputs1 = { 0, 0 }; double[][] testResults1 = { testInputs1, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs1, new Sigmoid()) }; Console.WriteLine("Test1 Results (0 AND 0) ---------------"); OutputResultsToConsole(testResults1); double[] testInputs2 = { 1, 0 }; double[][] testResults2 = { testInputs2, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs2, new Sigmoid()) }; Console.WriteLine("Test2 Results (1 AND 0) ---------------"); OutputResultsToConsole(testResults2); double[] testInputs3 = { 0, 1 }; double[][] testResults3 = { testInputs3, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs3, new Sigmoid()) }; Console.WriteLine("Test3 Results (0 AND 1) ---------------"); OutputResultsToConsole(testResults3); double[] testInputs4 = { 1, 1 }; double[][] testResults4 = { testInputs4, processingService.ProcessFeedForwardNeuralNetwork(neuralNetwork, testInputs4, new Sigmoid()) }; Console.WriteLine("Test4 Results (1 AND 1) ---------------"); OutputResultsToConsole(testResults4); }