public void UpdateNeuralNet(string csvString, string trainedNetName) { if (!File.Exists(outputDir + "dataset/" + trainedNetName + ".tmp")) { var lines = csvString.Split('\n'); var csv = from line in lines select(line.Split(',')).ToArray(); double[][] inputs = new double[150][]; double[][] outputs = new double[150][]; string[] types = new string[150]; int rowIndex = 0; foreach (var row in csv) { int colIndex = 0; inputs[rowIndex] = new double[4]; foreach (var col in row) { if (colIndex < row.Length - 1) { inputs[rowIndex][colIndex] = double.Parse(col); } else { types[rowIndex] = col; } colIndex++; } rowIndex++; } string[] distinct = types.Select(o => o.Replace("\r", "")).Distinct().ToArray(); PutDistinctLevel(trainedNetName, distinct); BackPropagation bp = new BackPropagation(); rowIndex = 0; foreach (var row in types) { outputs[rowIndex] = new double[3]; outputs[rowIndex] = bp.getIndex(row.Replace("\r", ""), distinct); rowIndex++; } // create neural network ActivationNetwork network = new ActivationNetwork(new SigmoidFunction(0.43), 4, 8, 3); BackPropagationLearning teacher = new BackPropagationLearning(network); teacher.LearningRate = 0.2; teacher.Momentum = 0; // loop double error = 1; while (error > 0.01) { // run epoch of learning procedure error = teacher.RunEpoch(inputs, outputs); Console.WriteLine("error is: " + error); // check error value to see if we need to stop // ... } network.Save(outputDir + @"dataset/" + trainedNetName + ".tmp"); } }
public string EvaluateData(string trainedNetName, string[] distinct, double[] data) { BackPropagation bp = new BackPropagation(); Network loadedNet = Network.Load(outputDir + @"dataset/" + trainedNetName + ".tmp"); double[] test = loadedNet.Compute(data); return(bp.getResult(test, distinct)); }