public double Execute(params double[] inputs) { if (inputs.Length == _inputNeurons.Count) { var i = 0; return(_outputNeuron.ActivationFunc(_inputNeurons .Select(neuron => neuron.ActivationFunc(inputs[i++])) .ToArray() )); } else { throw new ArgumentException("Invalid input data length", nameof(inputs)); } }
/// <summary> /// Коррекция весов нейрона /// </summary> /// <param name="neuron">Нейрон</param> /// <param name="error">Ошибка</param> private void UpdateWeights(Neuron neuron, double error) { if (neuron.NeuronType == TypeOfNeuron.Input) { return; } if (error != 0) { neuron.Delta = error * neuron.ActivationFunc(neuron.Output); } else { neuron.Delta = 0; } for (int i = 0; i < neuron.Weights.Count; i++) { var weight = neuron.Weights[i]; var input = neuron.Inputs[i]; var newWeigth = weight + input * neuron.Delta; neuron.Weights[i] = newWeigth; } }