Ejemplo n.º 1
0
        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();
        }