/// <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); }
public INeuralNetwork LoadNeuralNetwork(string filename) { var jsonGenes = File.ReadAllText(_directory + filename); var networkGene = JsonConvert.DeserializeObject <NeuralNetworkGene>(jsonGenes); var network = NeuralNetworkFactory.GetInstance().Create(networkGene); return(network); }
internal ITrainingSession ExtractSession(string serialized, double eval) { var networkGenes = JsonConvert.DeserializeObject <NeuralNetworkGene>(serialized); var network = NeuralNetworkFactory.GetInstance().Create(networkGenes); var session = new FakeTrainingSession(network, eval); return(session); }
public static IGeneticAlgorithmFactory GetInstance(IEvaluatableFactory evaluatableFactory) { var networkFactory = NeuralNetworkFactory.GetInstance(); var workingSetFactory = EvalWorkingSetFactory.GetInstance(); var random = new Random(); var breederFactory = BreederFactory.GetInstance(networkFactory, new RandomWeightInitializer(random)); var mutatorFactory = MutatorFactory.GetInstance(networkFactory, new RandomWeightInitializer(random)); return(new GeneticAlgorithmFactory(networkFactory, workingSetFactory, evaluatableFactory, breederFactory, mutatorFactory)); }
// Use this for initialization void Start() { createPopulation(); l_og.invokeGenerateObstacle(); lastFitnessTop1Bird = 0; lastFitnessTop2Bird = 0; l_neuralNetworkFactory = new NeuralNetworkFactory(); }
public async Task <ITrainingSession> GetBestSessionAsync() { var result = await ParseCloud.CallFunctionAsync <ParseObject>("bestNetwork", new Dictionary <string, object> { { "networkVersion", _networkVersion } }); var networkGenes = JsonConvert.DeserializeObject <NeuralNetworkGene>((string)result["jsonNetwork"]); var network = NeuralNetworkFactory.GetInstance().Create(networkGenes); var session = new FakeTrainingSession(network, (double)result["eval"]); return(session); }
static void Main(string[] args) { NeuralNetworkConfigurationSettings networkConfig = new NeuralNetworkConfigurationSettings { NumInputNeurons = 1, NumOutputNeurons = 1, NumHiddenLayers = 2, NumHiddenNeurons = 3, SummationFunction = new SimpleSummation(), ActivationFunction = new TanhActivationFunction() }; GenerationConfigurationSettings generationSettings = new GenerationConfigurationSettings { UseMultithreading = true, GenerationPopulation = 500 }; EvolutionConfigurationSettings evolutionSettings = new EvolutionConfigurationSettings { NormalMutationRate = 0.05, HighMutationRate = 0.5, GenerationsPerEpoch = 10, NumEpochs = 1000, NumTopEvalsToReport = 10 }; MutationConfigurationSettings mutationSettings = new MutationConfigurationSettings { MutateAxonActivationFunction = true, MutateNumberOfHiddenLayers = true, MutateNumberOfHiddenNeuronsInLayer = true, MutateSomaBiasFunction = true, MutateSomaSummationFunction = true, MutateSynapseWeights = true }; var random = new RandomWeightInitializer(new Random()); INeuralNetworkFactory factory = NeuralNetworkFactory.GetInstance(SomaFactory.GetInstance(networkConfig.SummationFunction), AxonFactory.GetInstance(networkConfig.ActivationFunction), SynapseFactory.GetInstance(new RandomWeightInitializer(new Random()), AxonFactory.GetInstance(networkConfig.ActivationFunction)), SynapseFactory.GetInstance(new ConstantWeightInitializer(1.0), AxonFactory.GetInstance(new IdentityActivationFunction())), random); IBreeder breeder = BreederFactory.GetInstance(factory, random).Create(); IMutator mutator = MutatorFactory.GetInstance(factory, random).Create(mutationSettings); IEvalWorkingSet history = EvalWorkingSetFactory.GetInstance().Create(50); IEvaluatableFactory evaluatableFactory = new GameEvaluationFactory(); IStorageProxy proxy = new NodeJSProxy(1, "http://localhost:3000", "123456789"); IEpochAction action = new BestPerformerUpdater(proxy); var GAFactory = GeneticAlgorithmFactory.GetInstance(evaluatableFactory); IGeneticAlgorithm evolver = GAFactory.Create(networkConfig, generationSettings, evolutionSettings, factory, breeder, mutator, history, evaluatableFactory, action); evolver.RunSimulation(); }
/// <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); }
public INeuralNetworkFactory BuildBackpropagationNetworkFactory(IWeightInitializer weightInitializer, ISomaFactory somaFactory, IActivationFunctionDerivative activationFunctionDerivative, IActivationFunction inputActivationFunction, INeuronFactory neuronFactory) { var axonFactory = BackpropagationAxonFactory.GetInstance(activationFunctionDerivative); var hiddenSynapseFactory = DecoratedSynapseFactory.GetInstance(weightInitializer, AxonFactory.GetInstance(activationFunctionDerivative)); var inputSynapseFactory = DecoratedSynapseFactory.GetInstance(new ConstantWeightInitializer(1.0), AxonFactory.GetInstance(inputActivationFunction)); var decoratedNeuronFactory = BackpropagationNeuronFactory.GetInstance(neuronFactory); INeuralNetworkFactory factory = NeuralNetworkFactory.GetInstance(somaFactory, axonFactory, hiddenSynapseFactory, inputSynapseFactory, weightInitializer, decoratedNeuronFactory); var backPropNetworkFactory = new BackpropagationNetworkFactoryDecorator(factory); return(backPropNetworkFactory); }
public ITrainingSession GetBestSession() { using (var client = new HttpClient()) { // Replace this with the API key for the web service client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _apiKey); var networkEndpoint = _baseUrl + "/network/" + _networkVersion; var response = client.GetAsync(networkEndpoint).Result; var responseObj = response.Content.ReadAsAsync <NodeJsMessage>().Result; if (responseObj == null) { return(null); } var networkGenes = JsonConvert.DeserializeObject <NeuralNetworkGene>(responseObj.networkGenes); var network = NeuralNetworkFactory.GetInstance().Create(networkGenes); var session = new FakeTrainingSession(network, responseObj.eval); return(session); } }
/// <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); }