public Neural3NetworkChecker(Neural3NetworkCreator neural3NetworkCreator) { _neural3NetworkCreator = neural3NetworkCreator; var funcActivationWorker = new FuncActivationWorker(_neural3NetworkCreator.FuncActivationType); _funcActivation = funcActivationWorker.GetFunction(); _derivativeOfFuncActivation = funcActivationWorker.DerivateByFuncActivation(); }
/// <summary> /// Вычисление сглаженного и комбинированного сигналов для нейронов следующего слоя, пропущенных через функцию активации /// </summary> public double[] CalcSignalsFromLayer(double[] inputSignals, Layer inputLayer, Layer outputLayer, Relation[,] relations, FuncActivationDelegate funcActivation) { var array = new double[outputLayer.Neurons.Length]; for (int i = 0; i < outputLayer.Neurons.Length; i++) { double sumX = 0; var outNeuron = outputLayer.Neurons[i]; for (int j = 0; j < inputLayer.Neurons.Length; j++) { var inNeuron = inputLayer.Neurons[j]; var relation = relations[j, i]; if (relation.InputNeuron.Number == inNeuron.Number && relation.OutputNeuron.Number == outNeuron.Number) { sumX += inputSignals[j] * relation.Weight; } } array[i] = funcActivation.Invoke(sumX); } return(array); }