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]); }
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()); }
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(); }
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); }
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(); } } }
static bool CatLoad() { BitmapCatEnumerator enums = new BitmapCatEnumerator("Sorted", new System.Drawing.Size(50, 25)); return(true); }