Example #1
0
        public static void Go(object exempl1)
        {
            Exempl exempl = (Exempl)exempl1;

            for (double i = exempl.start; i < exempl.end; i += 0.1)
            {
                for (int j = 2; j < 7; j++)
                {
                    Topology      topology      = new Topology(6, 4, i, j);
                    NeuralNetwork neuralNetwork = new NeuralNetwork(topology);

                    var diff1 = neuralNetwork.Learn(exempl.dataset, exempl.dataset2, size);
                    mutex.WaitOne();
                    if (diff1[0].Last() /* * diff1[0].Last() + (diff1[1].Last() - diff1[0].Last()) * (diff1[1].Last() - diff1[0].Last()) */ < minDif)
                    {
                        step   = i;
                        count  = j;
                        minDif = diff1[0].Last() /** diff1[0].Last() +( diff1[1].Last() - diff1[0].Last())* (diff1[1].Last() - diff1[0].Last())*/;
                    }
                    mutex.ReleaseMutex();
                }
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            Bitmap bitmap = new Bitmap(Properties.Resources.Image1);

            var dataset = new List <Tuple <double[], double[]> >
            {
                new Tuple <double[], double[]>(new double[] { 1, 0, 0, 0 }, new double[] { StrToDouble(0, 0, 1, 0, 0), StrToDouble(0, 1, 1, 0, 0), StrToDouble(0, 0, 1, 0, 0), StrToDouble(0, 0, 1, 0, 0), StrToDouble(0, 0, 1, 0, 0), StrToDouble(0, 1, 1, 1, 0) }),
                new Tuple <double[], double[]>(new double[] { 0, 1, 0, 0 }, new double[] { StrToDouble(0, 1, 1, 1, 0), StrToDouble(0, 1, 0, 1, 0), StrToDouble(0, 0, 0, 1, 0), StrToDouble(0, 0, 1, 0, 0), StrToDouble(0, 1, 0, 0, 0), StrToDouble(0, 1, 1, 1, 0) }),
                new Tuple <double[], double[]>(new double[] { 0, 0, 1, 0 }, new double[] { StrToDouble(1, 0, 0, 1, 0), StrToDouble(1, 0, 0, 1, 0), StrToDouble(1, 0, 0, 1, 0), StrToDouble(1, 0, 0, 1, 0), StrToDouble(1, 1, 1, 1, 1), StrToDouble(0, 0, 0, 0, 1) }),
                new Tuple <double[], double[]>(new double[] { 0, 0, 0, 1 }, new double[] { StrToDouble(1, 0, 0, 1, 0), StrToDouble(1, 0, 1, 0, 1), StrToDouble(1, 1, 1, 0, 1), StrToDouble(1, 1, 1, 0, 1), StrToDouble(1, 0, 1, 0, 1), StrToDouble(1, 0, 0, 1, 0) }),

                /*new Tuple<double[],double[]>(new double[]{1,0,0,0 },ImageToDouble(Properties.Resources.Image1)),
                 * new Tuple<double[],double[]>(new double[]{0,1,0,0 },ImageToDouble(Properties.Resources.Image2)),
                 * new Tuple<double[],double[]>(new double[]{0,0,1,0 },ImageToDouble(Properties.Resources.Image3)),
                 * new Tuple<double[],double[]>(new double[]{0,0,0,1 },ImageToDouble(Properties.Resources.Image4))
                 */
            };
            var dataset2 = new List <Tuple <double[], double[]> >
            {
                new Tuple <double[], double[]>(new double[] { 1, 0, 0, 0 }, new double[] { StrToDouble(1, 0, 1, 0, 0), StrToDouble(0, 1, 1, 0, 1), StrToDouble(0, 0, 1, 0, 0), StrToDouble(0, 0, 0, 0, 0), StrToDouble(0, 0, 1, 1, 0), StrToDouble(0, 1, 1, 0, 0) }),
                new Tuple <double[], double[]>(new double[] { 0, 1, 0, 0 }, new double[] { StrToDouble(0, 0, 1, 1, 0), StrToDouble(1, 1, 0, 1, 0), StrToDouble(1, 0, 0, 1, 0), StrToDouble(0, 0, 1, 1, 0), StrToDouble(0, 1, 0, 0, 1), StrToDouble(0, 0, 1, 1, 0) }),
                new Tuple <double[], double[]>(new double[] { 0, 0, 1, 0 }, new double[] { StrToDouble(1, 0, 1, 1, 0), StrToDouble(1, 0, 0, 1, 0), StrToDouble(0, 0, 0, 1, 0), StrToDouble(1, 0, 0, 1, 0), StrToDouble(1, 1, 0, 1, 1), StrToDouble(1, 0, 0, 0, 1) }),
                new Tuple <double[], double[]>(new double[] { 0, 0, 0, 1 }, new double[] { StrToDouble(1, 0, 0, 1, 1), StrToDouble(1, 0, 1, 1, 1), StrToDouble(1, 1, 0, 0, 1), StrToDouble(1, 1, 1, 1, 1), StrToDouble(1, 1, 1, 0, 1), StrToDouble(0, 0, 0, 1, 0) }),

                /*new Tuple<double[],double[]>(new double[]{1,0,0,0 },ImageToDouble(Properties.Resources.Image1)),
                 * new Tuple<double[],double[]>(new double[]{0,1,0,0 },ImageToDouble(Properties.Resources.Image2)),
                 * new Tuple<double[],double[]>(new double[]{0,0,1,0 },ImageToDouble(Properties.Resources.Image3)),
                 * new Tuple<double[],double[]>(new double[]{0,0,0,1 },ImageToDouble(Properties.Resources.Image4))
                 */
            };
            var    ex    = new Exempl[4];
            double start = 2.0;
            double end   = 5.0;
            double st    = (end - start) / ex.Length;

            for (int i = 0; i < ex.Length; i++)
            {
                ex[i]  = new Exempl(start, start + st, dataset, dataset2);
                start += st;
            }
            Thread[] threads = new Thread[4];
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread(new ParameterizedThreadStart(Go));
            }
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Start(ex[i]);
            }
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
            }
            NeuralNetwork neuralNetwork;
            Topology      topology;

            topology      = new Topology(6, 4, step, count);
            neuralNetwork = new NeuralNetwork(topology);

            var diff = neuralNetwork.Learn(dataset, dataset2, size);

            //-------------------------------------
            MLApp.MLApp matlab = new MLApp.MLApp();
            object      result;

            double[] mas = new double[size];
            for (int i = 0; i < size; i++)
            {
                mas[i] = i;
            }
            matlab.Execute(@"cd C:\Users\Arseniy\source\repos\NeuronNetworks\NeuronNetworks");
            matlab.Feval("myfunc", 1, out result, mas, diff[0], diff[1]);

            foreach (var data in dataset)
            {
                neuralNetwork.FeedForward(data.Item2);
            }
            foreach (var data in dataset2)
            {
                neuralNetwork.FeedForward(data.Item2);
            }
        }