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 bool TestFullConnect() { ArrDataEnumerator datas = new ArrDataEnumerator(); //and test double[,,] temp = new double[1, 1, 2]; double[,,] otemp = new double[1, 1, 1]; datas.AddSample(temp, otemp); temp = new double[1, 1, 2]; otemp = new double[1, 1, 1]; temp[0, 0, 0] = 1; datas.AddSample(temp, otemp); temp = new double[1, 1, 2]; otemp = new double[1, 1, 1]; temp[0, 0, 1] = 1; datas.AddSample(temp, otemp); temp = new double[1, 1, 2]; otemp = new double[1, 1, 1]; temp[0, 0, 0] = 1; temp[0, 0, 1] = 1; otemp[0, 0, 0] = 1; datas.AddSample(temp, otemp); Network network = new Network(); network.AddLayer(new TSConv2D(new Sigmoid(), 2, 1, 1, 10, 1)); network.AddLayer(new FullyConnLayar(new Sigmoid(), new Size(1, 1, 1))); //network.AddLayer(new FullyConnLayar(new Sigmoid(), new Size(1, 1, 20))); //network.AddLayer(new FullyConnLayar(new Sigmoid(), new Size(1, 1, 1))); network.Compile(new Size(1, 1, 2), true); network.Normalization(); //network.Normalization(); MomentumParallel mom = new MomentumParallel(network, 0.9, 1e-2); mom.TrainBatch(datas, 320, 3000); return(true); }
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 void LinePredictor() { StreamReader rd = new StreamReader("data.txt"); string classes_line = rd.ReadLine(); string[] classes = classes_line.Split(' '); List <double[, , ]> inputs = new List <double[, , ]>(); List <double [, , ]> outputs = new List <double[, , ]>(); while (!rd.EndOfStream) { inputs.Add(LineToArr3(rd.ReadLine())); outputs.Add(LineToArr3(rd.ReadLine())); } int output_len = outputs[0].Length; int nancount = 0; for (int i = 0; i < inputs.Count; i++) { var l = inputs[i]; for (int j = 0; j < l.Length; j++) { if (double.IsNaN(l[0, 0, j]) || double.IsInfinity(l[0, 0, j])) { nancount++; inputs.RemoveAt(i); outputs.RemoveAt(i); i--; break; } } } ArrDataEnumerator enumerator = new ArrDataEnumerator(inputs, outputs); DataCategoryVisualisation visualisation = new DataCategoryVisualisation(enumerator, 2, 6, 600, classes); visualisation.ShowDialog(); Network network = new Network(); network.loss = new MaxLoss(); network.AddLayer(new FullyConnLayar(new LeackyRelu(0.01), new NeuralNetwork.Size(1, 1, 64))); network.AddLayer(new FullyConnLayar(new Sigmoid(), new NeuralNetwork.Size(1, 1, output_len))); network.Compile(new NeuralNetwork.Size(1, 1, inputs[0].GetLength(2)), true); network.AddNoise(); Optimizer parallel = new MomentumParallel(network, 0.9, 0.0005); enumerator.SplitTrainVal(0.8, out ArrDataEnumerator train, out ArrDataEnumerator val); Learner learner = new Learner() { optimizer = parallel, train_data = train, val_data = val }; learner.metrics.Add(new ArgMaxMetrics()); learner.metrics.Add(new ArgmaxCount(0, 0, 4)); learner.metrics.Add(new ArgmaxTrainCount(0, 0, 4)); learner.callbacks.Add(new MetricSaveCallback("val_argmax")); learner.Learn(8, 50, 10000); }