public void Initialize(int NbInputs) { nbOfInputs = NbInputs; Neurons.Clear(); for (var i = 0; i < nbOfNeurons; i++) { var Node = new NNNeuron(); Node.Initialize(nbOfInputs); Neurons.Add(Node); } }
private int BackwardPropagateError(NNNeuralNetwork nn, double[] expected) { if (nn.nbOfOutputs == expected.Length) { // Parcours inverse des layers for (int i = nn.nbOfHiddenLayers; i >= 0; i--) { NNLayer Layer = nn.Layers[i]; double[] errors = new double[Layer.nbOfNeurons]; // Si ce n'est pas le dernier layer if (i != nn.nbOfHiddenLayers) { // Parcours des neurones du layer courant // Calcul de l'erreur for (int j = 0; j < Layer.nbOfNeurons; j++) { var error = 0.0; // Parcours des neurones du layers précédent nn.Layers[i + 1].Neurons.ForEach(Neuron => { error += Neuron.weights[j] * Neuron.delta; }); errors[i] = error; } } // Si c'est le dernier layer else { // Parcours des neurones du layer courant // Calcul de l'erreur for (int j = 0; j < Layer.nbOfNeurons; j++) { errors[j] = (expected[j] - Layer.Neurons[j].output); } } // Parcours des neurones du layer courant // Calcul de delta for (int j = 0; j < Layer.nbOfNeurons; j++) { NNNeuron Neuron = Layer.Neurons[j]; Neuron.delta = errors[j] * NNNeuron.TransfertDerivative(Neuron.output); } } return(0); } else { return(1); } }