Beispiel #1
0
        public float Train(TrainingSet trainingSet, float learningRate)
        {
            if (shuffle)
            {
                trainingSet.Shuffle();
            }

            var lastLayer = Layers[Layers.Length - 1];
            var outputs   = lastLayer.Outputs;
            var errors    = new Tensor(outputs.Dimensions);

            float sumCost = 0f;

            for (int i = 0, count = trainingSet.Count; i < count; i++)
            {
                errors.Clear();

                (var inputs, var expected) = trainingSet[i];

                var actuals = CalculateTrainingOutputs(inputs);

                sumCost += Loss.CalculateTotal(actuals, expected);

                for (int o = 0; o < actuals.Length; o++)
                {
                    errors[o] = Loss.Derivative(actuals[o], expected[o]);
                }

                BackPropagate(errors, learningRate, momentumRate);
            }

            return(sumCost / trainingSet.Count);
        }
Beispiel #2
0
        public float Test(TrainingSet validationSet)
        {
            float sumCost = 0f;

            for (int i = 0, count = validationSet.Count; i < count; i++)
            {
                var inputs   = validationSet[i].Item1;
                var expected = validationSet[i].Item2;

                var actuals = CalculateOutputs(inputs);

                sumCost += Loss.CalculateTotal(actuals, expected);
            }

            return(sumCost / validationSet.Count);
        }