Ejemplo n.º 1
0
        public static void Training(Network network, DataSet.DataSet data, Optimizer.Optimizer optimizer = null,
                                    float limitError = 1e-5f, bool printLog = false)
        {
            var error         = float.MaxValue;
            var it            = 0;
            var usedOptimizer = optimizer?.Clone() ?? DefaultOptimizer.Clone();

            usedOptimizer.LearningRate /= data.TrainingDataSize;
            network.SetOptimizer(usedOptimizer);
            while (error > limitError)
            {
                if (printLog)
                {
                    WriteLine($"Epoch {it++}");
                }
                error = 0.0f;
                network.ClearDeltaW();
                foreach (var datum in data.TrainingData())
                {
                    network.SetInputs(datum.Input);
                    network.ForwardPropagation();
                    error += network.Error(datum.Output);
                    network.BackPropagation(datum.Output);
                }
                network.UpdateWeights();
                error /= data.TrainingDataSize;
                if (printLog)
                {
                    WriteLine($"Error : {error: ##0.00000;-##0.00000}");
                }
            }
            network.FinishLearning();
        }