static void Main(string[] args) { string outputFile = "..\\..\\IrisTrainTestStats.txt"; FileStream ofs = new FileStream(outputFile, FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(ofs); sw.WriteLine("\nBegin neural network training demo"); sw.WriteLine("\nData is the famous Iris flower set."); sw.WriteLine("Predict species from sepal length, width, petal length, width"); sw.WriteLine("Iris setosa = 0 0 1, versicolor = 0 1 0, virginica = 1 0 0 \n"); sw.WriteLine("Raw data resembles:"); sw.WriteLine(" 5.1, 3.5, 1.4, 0.2, Iris setosa"); sw.WriteLine(" 7.0, 3.2, 4.7, 1.4, Iris versicolor"); sw.WriteLine(" 6.3, 3.3, 6.0, 2.5, Iris virginica"); sw.WriteLine(" ......\n"); double[][] allData = new double[150][]; string dataFile = "..\\..\\IrisData.txt"; allData = LoadData(dataFile, 150, 7); sw.WriteLine("\nFirst 6 rows of the 150-item data set:"); ShowMatrix(sw, allData, 6, 1, true); sw.WriteLine("Creating 80% training and 20% test data matrices"); double[][] trainData = null; double[][] testData = null; MakeTrainTest(allData, 72, out trainData, out testData); // seed = 72 gives a pretty demo. sw.WriteLine("\nFirst 3 rows of training data:"); ShowMatrix(sw, trainData, 3, 1, true); sw.WriteLine("First 3 rows of test data:"); ShowMatrix(sw, testData, 3, 1, true); sw.WriteLine("\nCreating a 4-input, 7-hidden, 3-output neural network"); sw.Write("Hard-coded tanh function for input-to-hidden and softmax for "); sw.WriteLine("hidden-to-output activations"); int numInput = 4; int numHidden = 7; int numOutput = 3; NeuralNetwork nn = new NeuralNetwork(numInput, numHidden, numOutput); int maxEpochs = 1000; double learnRate = 0.05; double momentum = 0.01; sw.WriteLine("Setting maxEpochs = " + maxEpochs + ", learnRate = " + learnRate + ", momentum = " + momentum); sw.WriteLine("Training has hard-coded mean squared " + "error < 0.040 stopping condition"); sw.WriteLine("\nBeginning training using incremental back-propagation\n"); nn.Train(trainData, maxEpochs, learnRate, momentum); sw.WriteLine("Training complete"); double[] weights = nn.GetWeights(); sw.WriteLine("Final neural network weights and bias values:"); ShowVector(sw, weights, 10, 3, true); double trainAcc = nn.Accuracy(trainData); sw.WriteLine("\nAccuracy on training data = " + trainAcc.ToString("F4")); double testAcc = nn.Accuracy(testData); sw.WriteLine("\nAccuracy on test data = " + testAcc.ToString("F4")); sw.WriteLine("\nEnd neural network training demo\n"); Console.ReadLine(); sw.Close(); ofs.Close(); } // Main