// A sample pattern list static PatternList CreatePatternList() { var patterns = new PatternList(); var input = new double[] { one, one, one, one, one }; var output = new double[] { one }; patterns.Add(input, output); input = new double[] { one, one, one, one, zero }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { one, zero, one, one, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { one, one, one, zero, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { one, zero, one, one, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { zero, one, one, one, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { one, one, zero, one, zero }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { zero, one, zero, one, one }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { zero, one, zero, one, one }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { zero, one, zero, one, one }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { zero, one, zero, one, one }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { one, one, one, zero, zero }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { one, one, zero, one, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { one, zero, one, zero, one }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { one, one, one, one, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { zero, one, one, one, zero }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { zero, one, zero, one, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { one, one, zero, one, one }; output = new double[] { one }; patterns.Add(input, output); input = new double[] { zero, one, zero, one, zero }; output = new double[] { zero }; patterns.Add(input, output); input = new double[] { zero, zero, zero, zero, zero }; output = new double[] { zero }; patterns.Add(input, output); return patterns; }
public int TrainNetwork(PatternList patterns, int maxMatch, int maxCycles, double threshold, bool verbose) { int counter = 0; int maxSuccess = 0; int limit = patterns.Count(); int success; bool whileFlag; if (maxMatch < 0) { maxMatch = limit; } do { success = 0; for (int i = 0; i < limit; i++) { var pattern = patterns.Get(i); network.RunNetwork(pattern.Input); double[] rawResults = network.TrainNetWork(pattern.Output); int[] truth = MathHelper.ThresholdArray(threshold, pattern.Output); int[] results = MathHelper.ThresholdArray(threshold, rawResults); pattern.Trained = true; for (int j = 0; j < results.Length; j++) { if (results[j] != truth[j]) { pattern.Trained = false; } } if (pattern.Trained) { ++success; } } if (maxSuccess < success) { maxSuccess = success; } if ((++counter % 10000) == 0) { if (verbose) { Console.WriteLine(counter + " success:" + success + " needed:" + patterns.Count() + " best run:" + maxSuccess); } } whileFlag = success < limit; if ((maxCycles > -1 && counter >= maxCycles) || success >= maxMatch) { whileFlag = false; } } while (whileFlag); if (verbose) { Console.WriteLine("Training was completed in " + counter + " cycles. " + maxSuccess + " patterns were learned."); } return(success); }
public int TrainNetwork(PatternList patterns, int maxMatch, int maxCycles, double threshold, bool verbose) { int counter = 0; int maxSuccess = 0; int limit = patterns.Count(); int success; bool whileFlag; if (maxMatch < 0) { maxMatch = limit; } do { success = 0; for (int i = 0; i < limit; i++) { var pattern = patterns.Get(i); network.RunNetwork(pattern.Input); double[] rawResults = network.TrainNetWork(pattern.Output); int[] truth = MathHelper.ThresholdArray(threshold, pattern.Output); int[] results = MathHelper.ThresholdArray(threshold, rawResults); pattern.Trained = true; for (int j = 0; j < results.Length; j++) { if (results[j] != truth[j]) { pattern.Trained = false; } } if (pattern.Trained) { ++success; } } if (maxSuccess < success) { maxSuccess = success; } if ((++counter % 10000) == 0) { if (verbose) { Console.WriteLine(counter + " success:" + success + " needed:" + patterns.Count() + " best run:" + maxSuccess); } } whileFlag = success < limit; if ((maxCycles > -1 && counter >= maxCycles) || success >= maxMatch) { whileFlag = false; } } while (whileFlag); if (verbose) { Console.WriteLine("Training was completed in " + counter + " cycles. " + maxSuccess + " patterns were learned."); } return success; }