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);
        }