static void Main() { Console.WriteLine("\nBegin Build 2013 neural network demo"); Console.WriteLine("\nData is the famous Iris flower set."); Console.WriteLine("Data is sepal length, sepal width, petal length, petal width -> iris species"); Console.WriteLine("Iris setosa = 0 0 1, Iris versicolor = 0 1 0, Iris virginica = 1 0 0 "); Console.WriteLine("The goal is to predict species from sepal length, width, petal length, width\n"); Console.WriteLine("Raw data resembles:\n"); Console.WriteLine(" 5.1, 3.5, 1.4, 0.2, Iris setosa"); Console.WriteLine(" 7.0, 3.2, 4.7, 1.4, Iris versicolor"); Console.WriteLine(" 6.3, 3.3, 6.0, 2.5, Iris virginica"); Console.WriteLine(" ......\n"); var allData = new TrainingData(); allData.LoadData("irisdata.txt", 4, 3); var sb = new StringBuilder(); ArrayFormatter.Matrix(sb, allData.Data, 6, 1, true, "\nFirst 6 rows of entire 150-item data set:"); Console.WriteLine(sb.ToString()); Console.WriteLine("Creating 80% training and 20% test data matrices"); allData.Split(0.8); sb.Clear(); ArrayFormatter.Matrix(sb, allData.TrainData, 5, 1, true, "\nFirst 5 rows of training data:"); Console.WriteLine(sb.ToString()); sb.Clear(); ArrayFormatter.Matrix(sb, allData.TestData, 3, 1, true, "\nFirst 3 rows of test data:"); Console.WriteLine(sb.ToString()); allData.NormalizeInputs(); sb.Clear(); ArrayFormatter.Matrix(sb, allData.TrainData, 5, 1, true, "\nFirst 5 rows of normalized training data:"); Console.WriteLine(sb.ToString()); sb.Clear(); ArrayFormatter.Matrix(sb, allData.TestData, 3, 1, true, "First 3 rows of normalized test data:"); Console.Write(sb.ToString()); Console.WriteLine("\nBuilding Neural Networks"); Console.WriteLine("Hard-coded tanh function for input-to-hidden and softmax for hidden-to-output activations"); var networks = new List <INeuralNetwork> { BuildBackPropNetwork(), BuildPsoNetwork() }; foreach (var network in networks) { Console.WriteLine("\n\nTraining Network: " + network.GetType()); var sw = new Stopwatch(); sw.Start(); network.Train(allData.TrainData); var ts = sw.Elapsed; Console.WriteLine( "Training complete in {0}", string.Format("{0:00}:{1:00}:{2:00}.{3:000}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds)); var trainAcc = network.Accuracy(allData.TrainData); var testAcc = network.Accuracy(allData.TestData); Console.WriteLine("\nAccuracy on training data = " + trainAcc.ToString("F4")); Console.WriteLine("\nAccuracy on test data = " + testAcc.ToString("F4")); Console.WriteLine("\n\nFinal Network: {0}", network); } Console.WriteLine("\nEnd Build 2013 neural network demo\n"); Console.ReadLine(); }