public static LayeredNeuralNetwork buildLayeredNetwork(LayeredNeuralNetworkBlueprint blueprint) { var newNetwork = new LayeredNeuralNetwork(); newNetwork.inputNeurons = new NeuralLayer(blueprint.inputNeuronAmount); newNetwork.outputNeurons = new NeuralLayer(blueprint.outputNeuronAmount); newNetwork.hiddenLayers = blueprint.hiddenLayersNeuronAmounts.Select(amount => new NeuralLayer(amount)).ToList(); newNetwork.neuralConnections = new List <NeuralConnectionLayer>(); if (newNetwork.hiddenLayers.Count == 0) { newNetwork.neuralConnections.Add( newNetwork.inputNeurons.ConnectWith(newNetwork.outputNeurons) ); return(newNetwork); } // Connect input neurons with first hidden layer newNetwork.neuralConnections.Add( newNetwork.inputNeurons.ConnectWith(newNetwork.hiddenLayers[0]) ); // Connect hidden layers with each other for (int i = 0; i < newNetwork.hiddenLayers.Count - 1; i++) { newNetwork.neuralConnections.Add( newNetwork.hiddenLayers[i].ConnectWith(newNetwork.hiddenLayers[i + 1]) ); } // Connect last hidden layer with output neurons newNetwork.neuralConnections.Add( newNetwork.hiddenLayers[newNetwork.hiddenLayers.Count - 1].ConnectWith(newNetwork.outputNeurons) ); return(newNetwork); }
public static int Main() { var hiddenLayers = new List <int>(); var networkBlueprint = new LayeredNeuralNetworkBlueprint { inputNeuronAmount = 2, outputNeuronAmount = 4, hiddenLayersNeuronAmounts = hiddenLayers }; var network = NeuralNetworkBuilder.buildLayeredNetwork(networkBlueprint); var sets = new List <TrainingData>(); for (int i = 0; i < 4; i++) { sets.Add(new TrainingData()); } sets[0].inputs.Add(-1); sets[0].inputs.Add(1); sets[0].expectedOutputs.Add(true); sets[0].expectedOutputs.Add(false); sets[0].expectedOutputs.Add(false); sets[0].expectedOutputs.Add(false); sets[1].inputs.Add(1); sets[1].inputs.Add(1); sets[1].expectedOutputs.Add(false); sets[1].expectedOutputs.Add(true); sets[1].expectedOutputs.Add(false); sets[1].expectedOutputs.Add(false); sets[2].inputs.Add(1); sets[2].inputs.Add(-1); sets[2].expectedOutputs.Add(false); sets[2].expectedOutputs.Add(false); sets[2].expectedOutputs.Add(true); sets[2].expectedOutputs.Add(false); sets[3].inputs.Add(-1); sets[3].inputs.Add(-1); sets[3].expectedOutputs.Add(false); sets[3].expectedOutputs.Add(false); sets[3].expectedOutputs.Add(false); sets[3].expectedOutputs.Add(true); bool makeLoop = true; int numberOfCycles = 0; int setNumber = 0; int good = 0; int all = 0; while (good != all || all == 0) { numberOfCycles++; if (makeLoop) { good = 0; all = 0; for (int i = 0; i < 10000; i++) { setNumber = RandGen.NextInt() % 4; if (network.Teach(sets[setNumber].inputs, sets[setNumber].expectedOutputs)) { good++; } all++; } } Console.WriteLine(numberOfCycles + ". good: " + good + "/" + all); SaveToFile(@"C:\Users\Majek\Desktop\WriteText.txt", good, all); } return(0); }