public void BackpropagateRunsWithZeroLayerInput() { double[,] weights = new double[, ] { { 1 } }; NetworkVector outputgradient = new NetworkVector(new double[] { 1 }); Layer layer = new LinearLayer(weights); layer.BackPropagate(outputgradient); double[] inputGradientCheck = new double[] { 1 }; double[] inputGradientValues = layer.InputGradient.ToArray(); for (int i = 0; i < layer.NumberOfInputs; i++) { Assert.AreEqual(inputGradientCheck[i], inputGradientValues[i]); } }
public void BackPropagateIsCorrect() { double[,] weights = new double[, ] { { 1, 2 }, { 3, 5 } }; Layer layer = new LinearLayer(weights); NetworkVector layerinput = new NetworkVector(new double[] { 1, -1 }); layer.Run(layerinput); NetworkVector outputgradient = new NetworkVector(new double[] { 7, 11 }); layer.BackPropagate(outputgradient); double[,] weightsCheck = new double[, ] { { -6, 9 }, { -8, 16 } }; LayerState state = layer.State; for (int i = 0; i < layer.NumberOfInputs; i++) { for (int j = 0; j < layer.NumberOfInputs; j++) { Assert.AreEqual(weightsCheck[i, j], state.Weights[i, j], string.Format("Failed for (i, j) = ({0}, {1}", i, j)); } } double[] biasesCheck = new double[] { -7, -11 }; for (int i = 0; i < layer.NumberOfInputs; i++) { Assert.AreEqual(biasesCheck[i], layer.State.Biases[i]); } double[] inputGradientCheck = new double[] { 40, 69 }; double[] inputGradientValues = layer.InputGradient.ToArray(); for (int i = 0; i < layer.NumberOfInputs; i++) { Assert.AreEqual(inputGradientCheck[i], inputGradientValues[i], string.Format("Failure for input {0}", i)); } }
public void BackpropagateRunsTwoByThree() { double[,] weights = new double[, ] { { 1, 2, 3 }, { 2, 3, 4 } }; Layer layer = new LinearLayer(weights); NetworkVector layerinput = new NetworkVector(new double[] { 1, 0, -1 }); layer.Run(layerinput); NetworkVector outputgradient = new NetworkVector(new double[] { 1, 1 }); layer.BackPropagate(outputgradient); double[] inputGradientCheck = new double[] { 3, 5, 7 }; double[] inputGradientValues = layer.InputGradient.ToArray(); for (int i = 0; i < layer.NumberOfInputs; i++) { Assert.AreEqual(inputGradientCheck[i], inputGradientValues[i], string.Format("Failure for input {0}", i)); } }