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