コード例 #1
0
ファイル: Layer.cs プロジェクト: Xenich/NeuralNetwork_1.1
        /// <summary>
        /// Рассчёт обратного распространения ошибки в случае, если слой - последний
        /// </summary>
        /// <param name="learnSpeed">коэффициент скорости обучения</param>
        /// <param name="alfa">инерционный момент</param>
        /// <param name="targetVector">ожидаемый векор выходных значений</param>
        /// <param name="input">вектор входных сигналов из предыдущего слоя</param>
        /// <param name="isNewEpoch">новая эпоха обучения?</param>
        public void SolveBackPropagationLastLayer(double learnSpeed, double alfa, double[] targetVector, double[] inputWithoutBias, bool isNewEpoch)
        {
            double[] input = InputWithBias(inputWithoutBias);
            double[,] deltaWThisEra = new double[neuronsCount, inputCount]; // дельты новой эпохи

            for (int i = 0; i < neuronsCount; i++)                          // нейрон
            {
                localGrad[i] = (targetVector[i] - OUT[i]) * activationFunc.SolveDerivative(localField[i]);
                for (int j = 0; j < inputCount; j++)                                                  // дендриты i-го нейрона
                {
                    deltaWThisEra[i, j] = alfa * deltaW[i, j] + learnSpeed * localGrad[i] * input[j]; //
                    weights[i, j]      += deltaWThisEra[i, j];
                }
            }
            if (isNewEpoch)
            {
                deltaW = deltaWThisEra;
            }
        }