示例#1
0
        public void TestTrainSimple()
        {
            // create lenet
            LenetClassifier classifier = new LenetClassifier();

            classifier.Set("junk", 0);      // disable junk
            classifier.SetExtractor("scaledfe");
            classifier.Initialize(classesNums);

            StringBuilder sbout;

            classifier.GetStdout(out sbout);
            Console.Write(sbout);

            // load RowDataset8 from file
            RowDataset8 ds = new RowDataset8();

            ds.Load(trainDatasetFileName);

            // do train
            classifier.Set("epochs", 3);
            classifier.XTrain(ds);

            // save classifier to file
            classifier.Save(trainNetworkFileName);

            // test recognize
            DoTestRecognize(classifier);
        }
示例#2
0
        public LenetClassifier TestLoadNetwork()
        {
            // load network from new format
            LenetClassifier classifier = new LenetClassifier();

            classifier.Load(networkFileName);

            return(classifier);
        }
示例#3
0
        private void DoTestRecognize(LenetClassifier classifier)
        {
            OutputVector ov = new OutputVector();
            Floatarray   v  = new Floatarray();
            Bytearray    ba = new Bytearray(1, 1);

            ImgIo.read_image_gray(ba, testPngFileName);
            NarrayUtil.Sub(255, ba);
            v.Copy(ba);
            v /= 255.0;
            classifier.XOutputs(ov, v);
            Console.WriteLine("Featured output class '{0}', score '{1}'", (char)ov.Key(ov.BestIndex), ov.Value(ov.BestIndex));
        }
示例#4
0
        public void TestRecognize()
        {
            LenetClassifier classifier = new LenetClassifier();

            classifier.Load(networkFileName);

            StringBuilder sbout;

            classifier.GetStdout(out sbout);
            Console.Write(sbout);

            DoTestRecognize(classifier);
        }
示例#5
0
        public void TestSaveNetwork()
        {
            // create lenet
            LenetClassifier classifier = new LenetClassifier();

            classifier.CharClass.TanhSigmoid = false;
            classifier.CharClass.NetNorm     = false;
            classifier.CharClass.AsciiTarget = true;
            classifier.JunkClass.TanhSigmoid = false;
            classifier.Set("junk", 0);      // disable junk
            classifier.SetExtractor("scaledfe");
            classifier.Initialize(classesNums);

            // load char lenet from old file format
            LenetWrapper.LoadNetwork(classifier.CharClass.HrLenet, oldformatFileName);

            // save network to new format
            classifier.Save(networkFileName);
        }
示例#6
0
        public void TestTrainLenetCseg()
        {
            string bookPath    = "data\\0000\\";
            string netFileName = "latin-lenet.model";

            Linerec.GDef("linerec", "use_reject", 1);
            Linerec.GDef("lenet", "junk", 1);
            Linerec.GDef("lenet", "epochs", 4);

            // create Linerec
            Linerec linerec;

            if (File.Exists(netFileName))
            {
                linerec = Linerec.LoadLinerec(netFileName);
            }
            else
            {
                linerec = new Linerec("lenet");
                LenetClassifier classifier = linerec.GetClassifier() as LenetClassifier;
                if (classifier != null)
                {
                    classifier.InitNumSymbLatinAlphabet();
                }
            }

            // temporary disable junk
            //linerec.DisableJunk = true;

            linerec.StartTraining();
            int        nepochs = 10;
            LineSource lines   = new LineSource();

            lines.Init(new string[] { "data2" });

            //linerec.GetClassifier().Set("epochs", 1);

            for (int epoch = 1; epoch <= nepochs; epoch++)
            {
                linerec.Epoch(epoch);

                // load cseg samples
                while (!lines.Done())
                {
                    lines.MoveNext();
                    Intarray cseg = new Intarray();
                    //Bytearray image = new Bytearray();
                    string transcript = lines.GetTranscript();
                    //lines.GetImage(image);
                    if (!lines.GetCharSegmentation(cseg) && cseg.Length() == 0)
                    {
                        Global.Debugf("warn", "skipping book {0} page {1} line {2} (no or bad cseg)",
                                      lines.CurrentBook, lines.CurrentPage, lines.Current);
                        continue;
                    }
                    SegmRoutine.make_line_segmentation_black(cseg);
                    linerec.AddTrainingLine(cseg, transcript);
                }

                lines.Reset();
                lines.Shuffle();
                // do Train and clear Dataset
                linerec.FinishTraining();
                // do save
                if (epoch % 1 == 0)
                {
                    linerec.Save(netFileName);
                }

                // recognize test line
                bool bakDisJunk = linerec.DisableJunk;
                linerec.DisableJunk = false;
                DoTestLinerecRecognize(linerec, "data2\\", "test1.png");
                linerec.DisableJunk = bakDisJunk;
            }

            // finnaly save
            linerec.Save(netFileName);
        }