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); }
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); }
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) { } }
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) { } }
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); }
public WeightedCombinerTests() { wc_1 = new WeightedCombiner(matrix_1); wc_1b = new WeightedCombiner(matrix_1, vector_1); wc_2 = new WeightedCombiner(matrix_2, vector_2); }