Ejemplo n.º 1
0
        static bool SaveLoad()
        {
            BitmapCatEnumerator enums = new BitmapCatEnumerator("Sorted", new System.Drawing.Size(50, 25));

            Network network = new Network();

            network.AddLayer(new Conv2D(new Relu(), 7, 7, 32));
            network.AddLayer(new MaxPool2D(new Relu(), 2, 2));

            network.AddLayer(new Conv2D(new Relu(), 5, 5, 64));
            network.AddLayer(new MaxPool2D(new Relu(), 2, 2));

            network.AddLayer(new FullyConnLayar(new Relu(), new Size(1, 1, 256)));
            network.AddLayer(new FullyConnLayar(new Sigmoid(), new Size(1, 1, 2)));

            network.Compile(new Size(3, 25, 50), true);

            network.Normalization();
            network.Normalization();

            string data = network.SaveJSON();

            Network network2 = new Network();

            network2.LoadJSON(data);

            var pair = enums.GetRandom(ref network);

            var out1 = network.GetOutput(pair.Key);
            var out2 = network.GetOutput(pair.Key);

            return(out1[0, 0, 0] == out2[0, 0, 0]);
        }
Ejemplo n.º 2
0
        static bool CatTrain()
        {
            BitmapCatEnumerator enums   = new BitmapCatEnumerator("Sorted", new System.Drawing.Size(50, 25));
            Network             network = new Network();

            network.AddLayer(new Conv2D(new Relu(), 7, 7, 32));
            network.AddLayer(new MaxPool2D(new Relu(), 2, 2));

            network.AddLayer(new Conv2D(new Relu(), 5, 5, 64));
            network.AddLayer(new MaxPool2D(new Relu(), 2, 2));


            network.AddLayer(new FullyConnLayar(new Relu(), new Size(1, 1, 256)));
            network.AddLayer(new FullyConnLayar(new Sigmoid(), new Size(1, 1, 2)));

            network.Compile(new Size(3, 25, 50), true);

            network.Normalization();

            var pair = enums.GetRandom(ref network);

            OneEnumerator one = new OneEnumerator();

            one.input  = pair.Key;
            one.output = pair.Value;

            MomentumParallel sgd = new MomentumParallel(network, 0.9, 1e-6);

            double[] errors = sgd.TrainBatch(enums, 32, 1000);

            return(errors[0] > errors.Last());
        }
Ejemplo n.º 3
0
        static void Test()
        {
            BitmapCatEnumerator enumerator = new BitmapCatEnumerator("Sorted", new System.Drawing.Size(100, 300));

            NeuralNetwork.MirrorEnumerator mirror = new MirrorEnumerator(enumerator);

            Network network = new Network();

            network.LoadJSON(File.ReadAllText("test_neural.neural"));
            network.CompileOnlyError();

            ImageShow show = new ImageShow(network.GetOutput(mirror.Current.Key).GetImage());

            show.ShowDialog();
        }
Ejemplo n.º 4
0
        static bool PreTrain()
        {
            BitmapCatEnumerator enums   = new BitmapCatEnumerator("Sorted", new System.Drawing.Size(24, 12));
            BitmapCatEnumerator val     = new BitmapCatEnumerator("Val", new System.Drawing.Size(24, 12));
            Network             network = new Network();

            //network.LoadJSON(System.IO.File.ReadAllText("pretrained_2.neural"));
            //network.CompileOnlyError();
            network.AddLayer(new Conv2D(new Relu(), 3, 3, 10));
            network.AddLayer(new MaxPool2D(new Relu(), 2, 2));

            network.AddLayer(new Conv2D(new Relu(), 5, 5, 30));
            network.AddLayer(new MaxPool2D(new Relu(), 2, 2));

            network.AddLayer(new FullyConnLayar(new Relu(), new Size(1, 1, 256)));
            network.AddLayer(new FullyConnLayar(new Sigmoid(), new Size(1, 1, 2)));

            network.Compile(new Size(3, 12, 24), true);

            network.Normalization();
            network.Normalization();

            MomentumParallel sgd = new MomentumParallel(network, 0.9, 1e-4);

            sgd.need_max = false;

            var pair = PretrainAutoEncoder.Action(network, sgd, enums, val, 2000, 32);

            Console.WriteLine("{0}\n{1}", pair.Key, pair.Value);
            Console.WriteLine("Start train");

            sgd = new MomentumParallel(network, 0, 1e-5);
            DateTime start = DateTime.Now;

            sgd.TrainBatch(enums, 256, 1);
            for (int i = 0; i < 100000; i++)
            {
                double[] errors = sgd.TrainBatchContinue(enums, 256, 1);
                if ((DateTime.Now - start).TotalMinutes > 5)
                {
                    System.IO.File.WriteAllText("train_" + i + ".neural", network.SaveJSON());
                    start = DateTime.Now;
                    Console.WriteLine("Saved at " + "train_" + i + ".neural");
                }
            }
            return(true);
        }
Ejemplo n.º 5
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Bitmap map = new Bitmap(openFileDialog1.FileName);

                BoxerDLL.BoxCut2D   cutter = new BoxCut2D(7, 10, 0.143f, 0.1f);
                List <Bitmap>       maps   = cutter.Cut(map);
                List <double[, , ]> rgbs   = new List <double[, , ]>();
                for (int i = 0; i < maps.Count; i++)
                {
                    maps[i] = new Bitmap(maps[i], new System.Drawing.Size(24, 12));
                    rgbs.Add(ImageDataConverter.GetRGBArray(maps[i]));
                }


                RectangleF[] rects = cutter.Rects1D(map.Width, map.Height);

                BitmapCatEnumerator enums   = new BitmapCatEnumerator("Sorted", new System.Drawing.Size(24, 12));
                BitmapCatEnumerator val     = new BitmapCatEnumerator("Val", new System.Drawing.Size(24, 12));
                Network             network = new Network();
                network.AddLayer(new Dropout(new Relu(), 0.05));
                network.AddLayer(new Conv2D(new Relu(), 7, 7, 32));
                network.AddLayer(new MaxPool2D(new Relu(), 2, 2));
                network.AddLayer(new Dropout(new Relu(), 0.05));

                network.AddLayer(new Conv2D(new Relu(), 3, 3, 64));
                network.AddLayer(new MaxPool2D(new Relu(), 2, 2));
                network.AddLayer(new Dropout(new Relu(), 0.05));

                network.AddLayer(new FullyConnLayar(new Sigmoid(), new NeuralNetwork.Size(1, 1, 256)));
                network.AddLayer(new FullyConnLayar(new Sigmoid(), new NeuralNetwork.Size(1, 1, 2)));

                network.Compile(new NeuralNetwork.Size(3, 12, 24), true);

                network.Normalization();

                pictureBox1.Image = map;

                MomentumParallel sgd = new MomentumParallel(network, 0.9, 1e-4);

                int last = 0;

                for (int i = 0; i < 1000; i++)
                {
                    var errors = sgd.TrainBatchPercent(enums, 32, 1);

                    if (errors.Last().Value > 90 || i - last > 20)
                    {
                        last = i;
                        Color[] colors = new Color[rects.Length];
                        Color   plus   = Color.FromArgb(100, Color.Red);
                        Color   minus  = Color.FromArgb(100, Color.Green);

                        for (int j = 0; j < maps.Count; j++)
                        {
                            double[,,] output = network.GetOutput(rgbs[j]);

                            colors[j] = output[0, 0, 0] > output[0, 0, 1] ? plus : minus;
                        }

                        pictureBox1.Image = DrawColoredRects(map, rects, colors);

                        var validation = network.GetError(val);
                        label2.Text = "Validation\nError: " + validation.Key + "\nPercent: " + validation.Value;
                    }
                    label1.Text = i + "\nError: " + errors.Last().Key + "\nPercent: " + errors.Last().Value;
                    Update();
                }
            }
        }
Ejemplo n.º 6
0
        static bool CatLoad()
        {
            BitmapCatEnumerator enums = new BitmapCatEnumerator("Sorted", new System.Drawing.Size(50, 25));

            return(true);
        }