public static void Train() { double[] inputs = { 3, 4 }; double result = 1; Neuron hiddenNeuron1 = new Neuron(); Neuron hiddenNeuron2 = new Neuron(); Neuron outputNeuron = new Neuron(); hiddenNeuron1.weights = new double[] { 0.12, 0.10 }; hiddenNeuron2.weights = new double[] { 0.12, 0.08 }; outputNeuron.weights = new double[] { 0.14, 0.15 }; hiddenNeuron1.inputs = new double[] { inputs[0], inputs[1] }; hiddenNeuron2.inputs = new double[] { inputs[0], inputs[1] }; for (int i = 0; i < 1000; i++) { outputNeuron.inputs = new double[] { hiddenNeuron1.Output, hiddenNeuron2.Output }; Console.WriteLine($"Iteration: {i}: Expected output: {1}, network output: {outputNeuron.Output}"); outputNeuron.error = Sigmoid.Derivative(outputNeuron.Output) * (result - outputNeuron.Output); outputNeuron.AdjustWeights(); hiddenNeuron1.error = Sigmoid.Derivative(hiddenNeuron1.Output) * outputNeuron.error * outputNeuron.weights[0]; hiddenNeuron2.error = Sigmoid.Derivative(hiddenNeuron2.Output) * outputNeuron.error * outputNeuron.weights[1]; hiddenNeuron1.AdjustWeights(); hiddenNeuron2.AdjustWeights(); } }
private void AdjustWeights(double delta) { _output.AdjustWeights(delta); foreach (Neuron neuron in _hidden) { neuron.AdjustWeights(_output.ErrorFeedback(neuron)); } }
void Train() { for (int i = 0; i < 4; i++) { H1.inputs = new float[] { dataInput[i, 0], dataInput[i, 1] }; H1.inputs = new float[] { dataInput[i, 0], dataInput[i, 1] }; OutputNeuron.inputs = new float[] { H1.output, H2.output }; Debug.Log(dataInput[i, 0] + " xor " + dataInput[i, 1] + " = " + OutputNeuron.output); OutputNeuron.error = sigmoid.derivative(OutputNeuron.output) * (ExpectedResults[i] - OutputNeuron.output); OutputNeuron.AdjustWeights(); H1.error = sigmoid.derivative(H1.output) * OutputNeuron.error * OutputNeuron.weights[0]; H2.error = sigmoid.derivative(H2.output) * OutputNeuron.error * OutputNeuron.weights[1]; } if (OutputNeuron.error == 0f) { Debug.LogWarning("SUCCESS!"); } }