/// <param name="checkSuccess">Funcion takes 'expected', 'actual' returns bool wether or not actual can be considerd a success</param> public static ValidationResult Validate(Network network, IEnumerable<InputExpectedResult> inputResults, Func<double[], double[], bool> checkSuccess) { ValidationResult totalResult = null; foreach(var cur in inputResults) { double[] actual = network.GetInputResult(cur.Input); double sse = SumSquaredError(cur.Output, actual); bool success = checkSuccess(cur.Output, actual); var res = new ValidationResult(sse, success); totalResult += res; } return totalResult; }
public void TestGetInputResult() { var rand = new Random(); double input = (double)(rand.NextDouble() * 100 + 1); double weight = (double)(rand.NextDouble() * 2); var sigmoid = new SigmoidFunction(); var nw = new Network(sigmoid, false); var inputNode = new Input(input); var outputNode = new Perceptron(sigmoid, "Output"); Connection.Create(weight, inputNode, outputNode); nw.Nodes = new Node[][] { new Node[] { inputNode }, new Node[] { outputNode } }; var nwOut = nw.GetInputResult(input)[0]; //Output // = Sig(inpToOut.Output) // = Sig(inpToOut.Weight * inpToOut.GetInput()) // = Sig(inpToOut.Weight * inputNode.Output) // = Sig(this.weight * this.input) var expOut = sigmoid.Calculate(weight * input); Assert.AreEqual(nwOut, expOut); }