예제 #1
0
        /// <summary>
        /// Construct the training data set that this recognizer will use to train the neural network.
        /// </summary>
        /// <param name="recognizer"></param>
        /// <param name="goodGates"></param>
        /// <param name="badGates"></param>
        /// <returns></returns>
        public static List <FeatureSet> ConstructTrainingSet(ImageRecognizer recognizer, IEnumerable <Shape> goodGates, IEnumerable <Shape> badGates)
        {
            List <FeatureSet> trainingData = new List <FeatureSet>();

            foreach (Shape goodGate in goodGates)
            {
                ImageRecognitionResult result = (ImageRecognitionResult)recognizer.recognize(goodGate, null);
                trainingData.Add(new FeatureSet(inputVectorForResult(result), new double[] { 1 }));
            }
            foreach (Shape badGate in badGates)
            {
                ImageRecognitionResult result = (ImageRecognitionResult)recognizer.recognize(badGate, null);
                trainingData.Add(new FeatureSet(inputVectorForResult(result), new double[] { 0 }));
            }
            return(trainingData);
        }
예제 #2
0
        /// <summary>
        /// Write a WEKA ARFF file to the given text writer for the given data.
        /// Neither the ARFF file nor Weka is used by this class, but the format
        /// is useful since Weka provides a very nice data exploration tool
        /// (see http://www.cs.waikato.ac.nz/ml/weka/).
        /// NOTE: This function does not close the given writer.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="recognizer"></param>
        /// <param name="goodGates"></param>
        /// <param name="badGates"></param>
        public static void WriteARFF(System.IO.TextWriter writer, ImageRecognizer recognizer, IEnumerable <Shape> goodGates, IEnumerable <Shape> badGates)
        {
            writer.WriteLine("@RELATION neuralImageRecognizerConfidence");
            writer.WriteLine("@ATTRIBUTE partialHausdorff  NUMERIC");
            writer.WriteLine("@ATTRIBUTE modifiedHausdorff NUMERIC");
            writer.WriteLine("@ATTRIBUTE yule              NUMERIC");
            writer.WriteLine("@ATTRIBUTE tanimoto          NUMERIC");
            writer.WriteLine("@ATTRIBUTE imageConfidence   NUMERIC");
            writer.WriteLine("@ATTRIBUTE imageType         {AND,OR,XOR,XNOR,NOR,NOT,NAND,NotBubble}");
            writer.WriteLine("@ATTRIBUTE idealConfidence   NUMERIC");

            writer.WriteLine("@DATA");

            foreach (Shape gate in goodGates)
            {
                ImageRecognitionResult result = (ImageRecognitionResult)recognizer.recognize(gate, null);
                writer.WriteLine(
                    result.PartialHausdorff + "," +
                    result.ModifiedHausdorff + "," +
                    result.Yule + "," +
                    result.Tanimoto + "," +
                    result.Confidence + "," +
                    result.Type.Name + ",1");
            }

            foreach (Shape gate in badGates)
            {
                ImageRecognitionResult result = (ImageRecognitionResult)recognizer.recognize(gate, null);
                writer.WriteLine(
                    result.PartialHausdorff + "," +
                    result.ModifiedHausdorff + "," +
                    result.Yule + "," +
                    result.Tanimoto + "," +
                    result.Confidence + "," +
                    result.Type.Name + ",0");
            }
        }
예제 #3
0
        public override RecognitionResult recognize(Shape shape, FeatureSketch featureSketch)
        {
            ImageRecognitionResult result = (ImageRecognitionResult)_imageRecognizer.recognize(shape, featureSketch);

            return(filterResult(result));
        }