Esempio n. 1
0
        public void TrainCorrectThreePasses()
        {
            Layer layer = new Layer(new double[, ] {
                { 1, 1 }
            });
            List <TrainingVector> trainingVectors = new List <TrainingVector>
            {
                new TrainingVector(
                    new NetworkVector(new double[] { 0, 0 }),
                    new NetworkVector(new double[] { 1 })
                    ),
                new TrainingVector(
                    new NetworkVector(new double[] { 1, 0 }),
                    new NetworkVector(new double[] { 0 })
                    ),
                new TrainingVector(
                    new NetworkVector(new double[] { 0, 1 }),
                    new NetworkVector(new double[] { 0 })
                    ),
                new TrainingVector(
                    new NetworkVector(new double[] { 1, 1 }),
                    new NetworkVector(new double[] { 1 })
                    )
            };

            OnlineTrainer trainer = new OnlineTrainer(layer, trainingVectors);

            trainer.Train();
            trainer.Train();
            trainer.Train();

            double[,] weightsCheck = new double[, ] {
                { 3, 7 }
            };
            double[] biasesCheck = new double[] { -1 };

            for (int i = 0; i < layer.NumberOfOutputs; i++)
            {
                Assert.AreEqual(biasesCheck[i], layer.State.Biases[i]);

                for (int j = 0; j < layer.NumberOfInputs; j++)
                {
                    Assert.AreEqual(weightsCheck[i, j], layer.State.Weights[i, j]);
                }
            }
        }
Esempio n. 2
0
        public void CanRunOnlineTrainer()
        {
            Layer layer = new Layer(new double[, ] {
                { 1, 1 }
            });
            List <TrainingVector> trainingVectors = new List <TrainingVector>
            {
                new TrainingVector(
                    new NetworkVector(new double[] { 0, 0 }),
                    new NetworkVector(new double[] { 1 })
                    )
            };

            OnlineTrainer trainer = new OnlineTrainer(layer, trainingVectors);

            trainer.Train();
        }
Esempio n. 3
0
        public void CanMakeOnlineTrainer()
        {
            Layer layer = new Layer(new double[, ] {
                { 1, 1 }
            });
            List <TrainingVector> trainingVectors = new List <TrainingVector>
            {
                new TrainingVector(
                    new NetworkVector(new double[] { 1, 1 }),
                    new NetworkVector(new double[] { 1 })
                    )
            };

            OnlineTrainer trainer = new OnlineTrainer(layer, trainingVectors);

            Assert.AreNotEqual(null, trainer);
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            string learningFileName = @"C:\Users\Jakub\Desktop\approximation_train_1.txt";
            string testFileName     = @"C:\Users\Jakub\Desktop\approximation_test.txt";

            LayerCharacteristic[] layers = new LayerCharacteristic[2];
            layers[0] = new LayerCharacteristic(2, new SigmoidUnipolarFunction());
            layers[1] = new LayerCharacteristic(1, new IdentityFunction());
            var network = new NeuralNetwork(1, layers);

            ILearningProvider dataProvider = new LearningApproximationDataProvider(learningFileName, testFileName, 1, 1, true);

            //dataProvider.LearnSet[0] = new Datum(Vector<double>.Build.Dense(2, 1), Vector<double>.Build.Dense(2, 1));
            //dataProvider.LearnSet[1] = new Datum(Vector<double>.Build.Dense(2, 1), Vector<double>.Build.Dense(2, 0));
            var trainer = new OnlineTrainer(new MeanSquareErrorCalculator(), dataProvider, new BackPropagationAlgorithm(new LearningRateHandler(0.01, 0.7, 1.05, 1.04), 0.2, 1.05));

            network.ConsoleDisplay();
            Console.ReadLine();
            #region old demo
            //LayerCharacteristic[] layers = new LayerCharacteristic[2];
            //layers[0] = new LayerCharacteristic(2, new SigmoidUnipolarFunction());
            //layers[1] = new LayerCharacteristic(2, new IdentityFunction());
            //var network = new NeuralNetwork(1, layers);
            //var input = Vector<double>.Build.Dense(2);
            //input[0] = 1;
            //input[1] = 2;
            //foreach (var layer in network.Layers)
            //{
            //    Console.Write("\nNext layer:");
            //    foreach (var row in layer.Weights.ToRowArrays())
            //    {
            //        Console.WriteLine("\nrow: ");
            //        foreach (var cell in row)
            //        {
            //            Console.Write($"{cell} | ");
            //        }

            //    }
            //}
            //Console.WriteLine($"\nCalculated first: {network.CalculateOutput(input)[0]}");
            //Console.WriteLine($"\nCalculated seond: {network.CalculateOutput(input)[1]}");
            //var r = network.CalculateOutput(input);
            //Console.ReadLine();
            #endregion
            #region multiplty demo
            //var m = Matrix<double>.Build.Random(2,1);
            //var v = Vector<double>.Build.Dense(2,2);
            //Console.WriteLine($"vector: {v[0]} {v[1]}");
            //Console.Write("\nMatrix:");
            //foreach (var row in m.ToRowArrays())
            //{
            //    Console.WriteLine("\nrow: ");
            //    foreach (var cell in row)
            //    {
            //        Console.Write($"{cell} | ");
            //    }

            //}
            //var res = v * m;
            //Console.WriteLine($"res: {res.ToString()}");

            //Console.ReadLine();
            #endregion
        }