예제 #1
0
        public void CorrectRunThreeInputs()
        {
            int numberOfBanks      = 3;
            WeightedCombiner layer = new WeightedCombiner(new WeightsMatrix(new double[, ] {
                { 2, 3, 5 }
            }));
            WeightedCombinerBank bank        = new WeightedCombinerBank(layer, numberOfBanks);
            NetworkVector        input       = new NetworkVector(new double[] { 7, 7, 7, 11, 11, 11, 13, 13, 13 });
            NetworkVector        outputcheck = new NetworkVector(new double[] { 70, 110, 130 });

            NetworkVector result = bank.Run(input);

            Assert.AreEqual(outputcheck, result);
        }
예제 #2
0
        public void TrainOnline_WC_CorrectThreePasses()
        {
            WeightsMatrix matrix = new WeightsMatrix(new double[, ] {
                { 1, 1 }
            });
            WeightedCombiner   wc = new WeightedCombiner(matrix);
            TrainingCollection trainingVectors = new TrainingCollection
            {
                new VectorPair(
                    new NetworkVector(new double[] { 0, 0 }),
                    new NetworkVector(new double[] { 1 })
                    ),
                new VectorPair(
                    new NetworkVector(new double[] { 1, 0 }),
                    new NetworkVector(new double[] { 0 })
                    ),
                new VectorPair(
                    new NetworkVector(new double[] { 0, 1 }),
                    new NetworkVector(new double[] { 0 })
                    ),
                new VectorPair(
                    new NetworkVector(new double[] { 1, 1 }),
                    new NetworkVector(new double[] { 1 })
                    )
            };

            Trainer trainer = new Trainer(wc, new SquaredError(), new GradientDescent());

            foreach (TrainingCollection tc in trainingVectors.AsSingletons())
            {
                trainer.Train(tc);
            }
            foreach (TrainingCollection tc in trainingVectors.AsSingletons())
            {
                trainer.Train(tc);
            }
            foreach (TrainingCollection tc in trainingVectors.AsSingletons())
            {
                trainer.Train(tc);
            }

            WeightsMatrix weightsCheck = new WeightsMatrix(new double[, ] {
                { 3, 7 }
            });
            NetworkVector biasesCheck = new NetworkVector(new double[] { -1 });

            Assert.AreEqual(biasesCheck, wc.Biases);
            Assert.AreEqual(weightsCheck, wc.Weights);
        }
예제 #3
0
        public void CannotRunWeightedCombinerBankWithBadInputSize()
        {
            int numberOfBanks      = 3;
            WeightedCombiner layer = new WeightedCombiner(new WeightsMatrix(new double[, ] {
                { 1 }
            }));
            WeightedCombinerBank bank     = new WeightedCombinerBank(layer, numberOfBanks);
            NetworkVector        badInput = new NetworkVector(2);

            try
            {
                bank.Run(badInput);
                Assert.Fail("WeightedCombinerBank.Run failed to throw an ArgumentException for input of the wrong size.");
            }
            catch (ArgumentException) { }
        }
예제 #4
0
        public void CannotBackPropagateWeightedCombinerBankWithBadOutputGradientSize()
        {
            int numberOfBanks      = 3;
            WeightedCombiner layer = new WeightedCombiner(new WeightsMatrix(new double[, ] {
                { 1 }
            }));
            WeightedCombinerBank bank        = new WeightedCombinerBank(layer, numberOfBanks);
            NetworkVector        badGradient = new NetworkVector(2);

            try
            {
                bank.BackPropagate(badGradient, new NetworkVector(3));
                Assert.Fail("WeightedCombinerBank.BackPropagate failed to throw an ArgumentException for outputgradient of the wrong size.");
            }
            catch (ArgumentException) { }
        }
예제 #5
0
        public void BatchTrainCorrectThreePasses_WC()
        {
            WeightsMatrix matrix = new WeightsMatrix(new double[, ] {
                { 1, 1 }
            });
            WeightedCombiner   wc = new WeightedCombiner(matrix);
            TrainingCollection trainingVectors = new TrainingCollection
            {
                new VectorPair(
                    new NetworkVector(new double[] { 0, 0 }),
                    new NetworkVector(new double[] { 1 })
                    ),
                new VectorPair(
                    new NetworkVector(new double[] { 1, 0 }),
                    new NetworkVector(new double[] { 0 })
                    ),
                new VectorPair(
                    new NetworkVector(new double[] { 0, 1 }),
                    new NetworkVector(new double[] { 0 })
                    ),
                new VectorPair(
                    new NetworkVector(new double[] { 1, 1 }),
                    new NetworkVector(new double[] { 1 })
                    )
            };

            Trainer trainer = new Trainer(wc, new SquaredError(), new GradientDescent());

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

            WeightsMatrix weightsCheck = new WeightsMatrix(new double[, ] {
                { -37, -37 }
            });
            NetworkVector biasesCheck = new NetworkVector(new double[] { -62 });

            Assert.AreEqual(biasesCheck, wc.Biases);
            Assert.AreEqual(weightsCheck, wc.Weights);
        }
예제 #6
0
 public WeightedCombinerTests()
 {
     wc_1  = new WeightedCombiner(matrix_1);
     wc_1b = new WeightedCombiner(matrix_1, vector_1);
     wc_2  = new WeightedCombiner(matrix_2, vector_2);
 }