public override void Iteration()
        {
            for (int i = 0; i < Training.Count; i++)
            {
                Process(Training[i]);
            }

            if (IterationNumber == 0)
            {
                UpdateRule.Init(this);
            }

            PreIteration();

            Update();
            PostIteration();

            if (Training is BatchDataSet)
            {
                ((BatchDataSet)Training).Advance();
            }
        }
        public void Update()
        {
            if (IterationNumber == 0)
            {
                UpdateRule.Init(this);
            }

            PreIteration();

            UpdateRule.Update(_gradients, _flat.Weights);
            Error = _errorCalculation.Calculate();

            PostIteration();

            EngineArray.Fill(_gradients, 0);
            _errorCalculation.Reset();

            if (Training is BatchDataSet)
            {
                ((BatchDataSet)Training).Advance();
            }
        }