Exemplo n.º 1
0
        internal static float[] GetDeltasHiddenLayer(float[] outputSignals, float[][] weightsNextLayer, float[] deltasErrorsNextLayer, ActivationFunc activationFunc)
        {
            int _neuronsCountThisLayer = outputSignals.Length;
            int _neuronsCountNextLayer = deltasErrorsNextLayer.Length;

            float[] _deltasErrors = new float[outputSignals.Length];
            float   _sumWeightsAndDeltasNextLayer;
            float   _derivativeActivFunc;

            for (int _neuron = 0; _neuron < _neuronsCountThisLayer; _neuron++)
            {
                _sumWeightsAndDeltasNextLayer = GetSumWeightsAndDeltasNextLayer(_neuron);
                _derivativeActivFunc          = NeuralMath.GetDerivativeByFunction(outputSignals[_neuron], activationFunc);
                _deltasErrors[_neuron]        = _sumWeightsAndDeltasNextLayer * _derivativeActivFunc;
            }

            return(_deltasErrors);

            float GetSumWeightsAndDeltasNextLayer(int neuronPrevLayer)
            {
                float _sumWeightsAndDeltas = 0;

                for (int _neuronNextLayer = 0; _neuronNextLayer < _neuronsCountNextLayer; _neuronNextLayer++)
                {
                    _sumWeightsAndDeltas += deltasErrorsNextLayer[_neuronNextLayer] * weightsNextLayer[neuronPrevLayer][_neuronNextLayer];
                }
                return(_sumWeightsAndDeltas);
            }
        }
Exemplo n.º 2
0
        internal static float[] GetDeltasOutputLayer(float[] outputSignals, float[] expectedSignals, ActivationFunc activationFunc)
        {
            int _neuronsCountThisLayer = outputSignals.Length;

            float[] _deltasErrors = new float[_neuronsCountThisLayer];
            float   _errorOutSignal;
            float   _derivativeActivFunc;

            for (int _neuron = 0; _neuron < _neuronsCountThisLayer; _neuron++)
            {
                _errorOutSignal        = expectedSignals[_neuron] - outputSignals[_neuron];
                _derivativeActivFunc   = NeuralMath.GetDerivativeByFunction(outputSignals[_neuron], activationFunc);
                _deltasErrors[_neuron] = _errorOutSignal * _derivativeActivFunc;
            }

            return(_deltasErrors);
        }