public override void CreateNetwork()
        {
            Nodes = new NeuralNodeBase[NodeCount];
            Links = new NeuralLink[LinkCount];

            var curr = 0;

            for (var i = 0; i < NodeCounts[0]; i++)                  // Input layer nodes
            {
                Nodes[curr++] = new InputNode();
            }

            FirstMiddleNode = curr;                                                     // Middle layer nodes
            for (var i = 1; i < NumLayers - 1; i++)
            {
                for (var j = 0; j < NodeCounts[i]; j++)
                {
                    Nodes[curr++] = new BPMiddleNode(LearningRate, MomentumTerm);
                }
            }

            FirstOutputNode = curr;                              // Output layer nodes
            for (var i = 0; i < NodeCounts[NumLayers - 1]; i++)
            {
                Nodes[curr++] = new BPOutputNode(LearningRate, MomentumTerm);
            }

            for (var i = 0; i < LinkCount; i++)                        // Create Links
            {
                Links[i] = new BackPropagationLink();
            }

            curr = 0;
            int layer1 = 0, layer2 = FirstMiddleNode;

            for (var i = 0; i < NumLayers - 1; i++)                   // Connect Layers
            {
                for (var j = 0; j < NodeCounts[i + 1]; j++)
                {
                    for (var k = 0; k < NodeCounts[i]; k++)
                    {
                        Links[curr].InNode  = Nodes[layer1 + k];
                        Links[curr].OutNode = Nodes[layer2 + j];

                        var link    = Links[curr++];
                        var inNode  = Nodes[layer1 + k];
                        var outNode = Nodes[layer2 + j];

                        inNode.OutLinks.Add(link);
                        outNode.InLinks.Add(link);

                        link.InNode  = inNode;
                        link.OutNode = outNode;
                    }
                }

                layer1  = layer2;
                layer2 += NodeCounts[i + 1];
            }
        }
Esempio n. 2
0
        protected override void createNetwork()
        {
            nodes = new NeuralNodeBase[nodeCount];
            links = new NeuralLink[linkCount];

            for (int i = 0; i < nodeCount - 2; i++)           // Create Input Nodes
            {
                nodes[i] = new InputNode();
            }

            nodes[nodeCount - 2] = new BiasNode();                // Create Bias Node
            nodes[nodeCount - 1] = new AdalineNode(learningRate);

            for (int i = 0; i < linkCount; i++)
            {
                AdalineLink l = new AdalineLink(nodes[i], nodes[nodeCount - 1]);               // Create links

                //l.InNode = nodes[i];
                //l.OutNode = nodes[nodeCount-1];

                links[i] = l;
            }

            for (int i = 0; i < linkCount; i++)                   // Connect inputs to ADALINE
            {
                Link(nodes[i], nodes[nodeCount - 1], links[i]);
            }
        }