static void Main(string[] args) { double[] p = new double[10]; IMLData data = new BasicMLData(p); var network = CreateNetwork(); var trainingSet = GetTrainingSet(); //var train = new ResilientPropagation(network, trainingSet); //var train = new Backpropagation(network, trainingSet, 0.7, 0.2); //var train = new ManhattanPropagation(network, trainingSet, 0.001); //var train = new ScaledConjugateGradient(network, trainingSet); //var train = new LevenbergMarquardtTraining(network, trainingSet); var train = new QuickPropagation(network, trainingSet, 2.0); int epoch = 1; do { train.Iteration(); Console.WriteLine($"Iteration No: {epoch++}, Error: {train.Error}"); }while (train.Error > 0.01); foreach (var item in trainingSet) { var output = network.Compute(item.Input); Console.WriteLine($"Input: {item.Input[0]}, {item.Input[1]} Ideal: {item.Ideal[0]} Actual: {output[0]}"); } Console.ReadLine(); }
private static Propagation GetTraining(BasicNetwork network, BasicMLDataSet trainingSet) { //var train = new ResilientPropagation(network, trainingSet); //var train = new Backpropagation(network, trainingSet, 0.7, 0.2); //var train = new ManhattanPropagation(network, trainingSet, 0.001); //var train = new ScaledConjugateGradient(network, trainingSet); //var train = new LevenbergMarquardtTraining(network, trainingSet); var training = new QuickPropagation(network, trainingSet, 2.0); return(training); }
public static BasicNetwork TrainNetwork(string trainSetLocation, string path2SaveModel, string trainingHistoryLocation, int numberOfEpochs, double errorThreshold, NetworkTrainer trainer) { IMLDataSet trainingDataSet = null; List <NeuralLayerDescriptor> descriptor = NetworkTrainingInitializer(trainSetLocation, out trainingDataSet); var network = NetworkCreator.CreateNetwork(descriptor); ITrain train = null; switch (trainer) { case NetworkTrainer.BackProp: train = new Backpropagation(network, trainingDataSet); break; case NetworkTrainer.ResilientBackProp: train = new ResilientPropagation(network, trainingDataSet); break; case NetworkTrainer.Quick: train = new QuickPropagation(network, trainingDataSet); break; case NetworkTrainer.ScaledConjugateGradient: train = new ScaledConjugateGradient(network, trainingDataSet); break; } int epoch = 0; using (System.IO.StreamWriter file = new System.IO.StreamWriter(trainingHistoryLocation)) { do { train.Iteration(); Console.WriteLine("Epoch #" + epoch + " Error:" + train.Error); file.WriteLine(train.Error); epoch++; } while ((epoch < numberOfEpochs) && (train.Error > errorThreshold)); } var serializer = new BinaryFormatter(); using (var s = new FileStream(path2SaveModel, FileMode.Create)) { serializer.Serialize(s, network); } return(network); }