コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: StartUp.cs プロジェクト: MarekOchocki/ANN
        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);
        }