/// <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); }
/// <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"); } }
public override RecognitionResult recognize(Shape shape, FeatureSketch featureSketch) { ImageRecognitionResult result = (ImageRecognitionResult)_imageRecognizer.recognize(shape, featureSketch); return(filterResult(result)); }