// 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;
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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;
        }