//Wsteczna propagacja dla warstwy output public void BackPropOutput(int layerNumber, int rowOfNeurons, List <double> outputs) { //Iterowanie po każdym neuronie w warstwie output for (int i = 0; i < layers[layerNumber].neurons.Count; i++) { //Obliczanie błędu dla każdego neurona errors[layerNumber][i] = (expectedResult[rowOfNeurons][i] - outputs[i]) * Function_Activation.DerivativeBipolar(layers[layerNumber].neurons[i].InputValue); } }
//Wsteczna propagacja dla warstwy ukrytej public void BackPropHidden(int layerNumber) { for (int i = 0; i < layers[layerNumber].neurons.Count; i++) { errors[layerNumber][i] = 0; //Iterowanie po każdym neuronie w warstwie kolejnej, czyli output for (int j = 0; j < layers[layerNumber + 1].neurons.Count; j++) { errors[layerNumber][i] += errors[layerNumber + 1][j] * layers[layerNumber + 1].neurons[j].inputs[i].Weight; } errors[layerNumber][i] *= Function_Activation.DerivativeBipolar(layers[layerNumber].neurons[i].InputValue); } }
//Zwrócenie wartości output dla każdego inputu public void GetOutputValue() { InputValue = Function_Input.WeightedSumInputFunction(inputs); OutputValue = Function_Activation.BipolarActivationFunction(InputValue); }