Exemple #1
0
        public void ResetAutoTest()
        {
            int[] layers            = new int[] { 4, 5, 1 };
            MultilayerPerceptron nn = new MLPGenerator().Create(layers, 1, new Sigmoid());

            double[] randomSelected = new double[] {
                nn.Structure.Input[1].Next[1].Weight.Value,
                nn.Structure.Input[1].Next[2].Weight.Value,
                nn.Structure.Input[1].Next[2].Next.Next[0].Weight.Value,
                nn.Structure.Output[0].Previous[1].Weight.Value
            };
            double[] inp    = new double[] { -0.978, 2.34, 0.2, -0.33 };
            double[] pulsed = nn.Pulse(inp);

            nn.Reset(0, 1);
            double[] randomSelected2 = new double[] {
                nn.Structure.Input[1].Next[1].Weight.Value,
                nn.Structure.Input[1].Next[2].Weight.Value,
                nn.Structure.Input[1].Next[2].Next.Next[0].Weight.Value,
                nn.Structure.Output[0].Previous[1].Weight.Value
            };
            for (int i = 0; i < randomSelected.Length; i++)
            {
                Assert.AreNotEqual(randomSelected[i], randomSelected2[i]);
            }
            double[] pulsed2 = nn.Pulse(inp);
            for (int i = 0; i < pulsed.Length; i++)
            {
                Assert.AreNotEqual(pulsed[i], pulsed2[i]);
            }
        }
Exemple #2
0
        private void button2_Click(object sender, EventArgs e)
        {
            int    cycles        = int.Parse(textBox1.Text);
            int    hiddenNeurons = int.Parse(textBox2.Text);
            double learnRate     = double.Parse(textBox3.Text);
            double momentum      = double.Parse(textBox4.Text);

            int[] layers             = new int[] { 1, hiddenNeurons, 1 };
            MultilayerPerceptron ann = new MLPGenerator().Create(layers, 1, new Sigmoid(2));

            ann.Reset(-1, 1);
            ann.Momentum    = momentum;
            ann.LearnFactor = learnRate;
            List <TrainingData> trainingList = new List <TrainingData>();

            for (int i = 0; i < Map.Count; i++)
            {
                double[] input  = new double[] { (double)Map[i].Item1 / (double)pictureBox1.Width };
                double[] output = new double[] { (double)Map[i].Item2 / (double)pictureBox1.Height };
                trainingList.Add(new TrainingData(input, output));
            }

            var res = ann.BP(new BPRequest(trainingList.ToArray(), cycles));

            for (int i = 0; i < pictureBox1.Width; i++)
            {
                int    x  = i;
                double yd = ann.Pulse(new double[] { (double)i / (double)pictureBox1.Width })[0];
                int    y  = Convert.ToInt32(yd * pictureBox1.Height);
                Point  p  = new Point(x, y);
                Graph.DrawRectangle(new Pen(new SolidBrush(Color.Orange)), p.X, p.Y, 1, 1);
            }
            pictureBox1.Image = Bitmap;
        }
Exemple #3
0
        public void BPMaxMSETest()
        {
            int[] layers            = new int[] { 4, 5, 1 };
            MultilayerPerceptron nn = new MLPGenerator().Create(layers, 1, new Sigmoid());
            var result = nn.BP(new BPRequest(TestVec, 1000, 0, 0.7));

            Assert.IsTrue(result.Epochs.Length < 1000);
        }
Exemple #4
0
        public void BPMaxCyclesTest()
        {
            int[] layers            = new int[] { 4, 5, 1 };
            MultilayerPerceptron nn = new MLPGenerator().Create(layers, 1, new Sigmoid());
            var result = nn.BP(new BPRequest(TestVec, 5));

            Assert.AreEqual(result.Epochs.Length, 5);
        }
Exemple #5
0
        public void ExplicitBPTimeTest()
        {
            int[] layers            = new int[] { 4, 10, 1 };
            MultilayerPerceptron nn = new MLPGenerator().Create(layers, 1, new Sigmoid());
            var result = nn.BP(new BPRequest(TestVec, 1500 * 10));

            throw new NotImplementedException("BP Total ms=" + result.BPTime.TotalMilliseconds.ToString());
        }
Exemple #6
0
        public void ReasonableBPTimeTest()
        {
            int[] layers            = new int[] { 4, 5, 1 };
            MultilayerPerceptron nn = new MLPGenerator().Create(layers, 1, new Sigmoid());
            var result = nn.BP(new BPRequest(TestVec, 10000));

            Assert.IsTrue(result.BPTime.TotalMilliseconds < 2000);
        }
Exemple #7
0
        public void ResetManualTest()
        {
            int[] layers            = new int[] { 4, 5, 1 };
            MultilayerPerceptron nn = new MLPGenerator().Create(layers, 1, new Sigmoid());

            nn.Reset(() => 0.7);
            Assert.AreEqual(nn.Structure.Input[1].Next[2].Weight.Value, 0.7); // random selected
        }
Exemple #8
0
        public void MLPSerialization()
        {
            MultilayerPerceptron mlp = new MLPGenerator().Create(new int[] { 2, 2, 1 });

            mlp.Reset(0, 1);
            MLPXMLSerializer     serializer = new MLPXMLSerializer();
            XDocument            xdoc       = serializer.Serialize(mlp);
            MultilayerPerceptron mlp2       = serializer.Deserialize(xdoc);

            Assert.AreEqual(mlp2.Structure.Elements.Length, mlp.Structure.Elements.Length);
            Assert.AreEqual(mlp2.Structure.Elements[3].GetDescription(), mlp.Structure.Elements[3].GetDescription());
            Assert.AreEqual(mlp2.Structure.Elements[0].Next[0].Weight.Value, mlp.Structure.Elements[0].Next[0].Weight.Value);
            Assert.AreEqual(((NeuronBase)mlp2.Structure.Elements[4]).Previous[0].Weight.Value, ((NeuronBase)mlp.Structure.Elements[4]).Previous[0].Weight.Value);
            Assert.AreEqual(((NeuronBase)mlp2.Structure.Elements[3]).Func.GetType(), ((NeuronBase)mlp.Structure.Elements[3]).Func.GetType());
        }
Exemple #9
0
        public void PulseManySameResultsTest()
        {
            MLPGenerator gen = new MLPGenerator();

            int[] layers            = new int[] { 4, 3, 2 };
            MultilayerPerceptron nn = gen.Create(layers, 1, new Sigmoid());

            double[] inp  = new double[] { -0.978, 2.34, 0.2, -0.33 };
            double[] res  = nn.Pulse(inp);
            double[] res2 = nn.Pulse(inp);
            double[] res3 = nn.Pulse(inp);
            Assert.AreEqual(res.Length, res2.Length);
            Assert.AreEqual(res.Length, res3.Length);
            for (int i = 0; i < res.Length; i++)
            {
                Assert.AreEqual(res[i], res2[i]);
                Assert.AreEqual(res[i], res3[i]);
            }
        }
Exemple #10
0
        static void Main(string[] args)
        {
            TrainingData[] xor=new TrainingData[] {
                new TrainingData(new double[] {1,0}, new double[] {1}),
                new TrainingData(new double[] {0,1}, new double[] {1}),
                new TrainingData(new double[] {1,1}, new double[] {0}),
                new TrainingData(new double[] {0,0}, new double[] {0}),
            };

            int[] layers = new int[] { 2,2,1 };
            MultilayerPerceptron mlp=new MLPGenerator().Create(layers,1,new Sigmoid());
            mlp.Inspector=new SignalInspector();

            //shows the neurons processing in VS Output window
            mlp.Inspector.Debug=true;
            mlp.Inspector.TraceLevel=3;
            mlp.LearnFactor=0.9;
            var response=mlp.BP(new BPRequest(xor,1000));

            Console.ReadKey();
        }
Exemple #11
0
        static void Main(string[] args)
        {
            TrainingData[] xor = new TrainingData[] {
                new TrainingData(new double[] { 1, 0 }, new double[] { 1 }),
                new TrainingData(new double[] { 0, 1 }, new double[] { 1 }),
                new TrainingData(new double[] { 1, 1 }, new double[] { 0 }),
                new TrainingData(new double[] { 0, 0 }, new double[] { 0 }),
            };

            int[] layers             = new int[] { 2, 2, 1 };
            MultilayerPerceptron mlp = new MLPGenerator().Create(layers, 1, new Sigmoid());

            mlp.Inspector = new SignalInspector();

            //shows the neurons processing in VS Output window
            mlp.Inspector.Debug      = true;
            mlp.Inspector.TraceLevel = 3;
            mlp.LearnFactor          = 0.9;
            var response = mlp.BP(new BPRequest(xor, 1000));

            Console.ReadKey();
        }
Exemple #12
0
        public void FullNetworkScanTest()
        {
            int[] layers            = new int[] { 2, 3, 1 };
            MultilayerPerceptron nn = new MLPGenerator().Create(layers, 1, new Sigmoid());

            //check input and output layer
            Assert.AreEqual(nn.Structure.Input.Length, 2);
            Assert.AreEqual(nn.Structure.Output.Length, 1);

            int count = 0;

            foreach (var i in nn.Structure.Input)
            {
                foreach (var j in i.Next)
                {
                    CheckConnection(i, j.Next, ref count);
                }
            }
            Assert.AreEqual(count, 12);
            //check bias
            Assert.AreEqual(nn.Structure.Bias.Next.Length, 4);
            Assert.IsTrue(nn.Structure.Bias.Next.All(x => x.Next is Neuron));
        }