예제 #1
0
        /// <summary>
        /// Main execution of the algorithm.
        /// </summary>
        public void Run()
        {
            //TODO: ensure we have a termination criteria and problem
            _instance.Value = this;
            if (!_initialized)
            {
                PerformInitialization();
            }

            //_instance.Value = this;
            while (!TerminationCriterion.Terminate(this))
            {
                //_instance.Value = this; //TODO: set instance for multipopulation?
                PerformIteration();
                IterationComplete?.Invoke(this, this);
                //_instance.Value = null;
            }

            AlgorithmComplete?.Invoke(this, this);
            _instance.Value = null;
        }
예제 #2
0
        /// <summary>
        ///     Uczy sieć neuronową metodą spadku w kierunku gradientu.
        /// </summary>
        /// <param name="trainingData">Dane uczące.</param>
        /// <param name="ct">Token pozwalający przerwać proces uczenia poprzez sygnał z zewnątrz.</param>
        public void Train(
            IEnumerable <IDataPoint> trainingData,
            CancellationToken ct)
        {
            for (var i = 1;; i++)
            {
                foreach (var miniBatch in trainingData.Chunk(BatchSize))
                {
                    UpdateMiniBatch(miniBatch, BatchSize, LearningRate);
                    if (ct.IsCancellationRequested)
                    {
                        break;
                    }
                }

                IterationComplete?.Invoke(i);
                if (ct.IsCancellationRequested)
                {
                    break;
                }
            }
        }
예제 #3
0
 private void OnIterationComplete(GmresIterationCompleteEventArgs e)
 => IterationComplete?.Invoke(this, e);