public static void Main(String[] args) { //var sourceDir = Network.Default.DatasetDirectory + "\\Base"; //var outputDir = Network.Default.DatasetDirectory; //CharacterDatasetHandler.GenerateDatasetEntry(sourceDir, outputDir); var trainAlphabet = new AlphabetDataset(EnumDatasetType.Train); var validationAlphabet = new AlphabetDataset(EnumDatasetType.Validation); var testAlphabet = new AlphabetDataset(EnumDatasetType.Test); var cycles = DatasetUtils.BuildCyclesFromDataset(trainAlphabet, validationAlphabet, testAlphabet); var network = new MultiLayerNetwork(cycles); network.InitializeNetwork(); ObservableCollection <string> lettersReturned; var likelyResults = ""; Console.WriteLine("\nThe Network has initialized. The test of the Network will start\n"); Console.ReadLine(); var numberOfExamples = 0; var numberOfCorrectResults = 0; for (int i = 0; i < network.Cycles.Count; i++) { //network.Cycles[i].ExamplesTest = network.RandomizeList(network.Cycles[i].ExamplesTest); foreach (Example example in network.Cycles[i].ExamplesTest) { var outputFromTrainedNetwork = network.CheckElement(example); lettersReturned = DatasetUtils.GetLettersFromOutputArray(outputFromTrainedNetwork); likelyResults = string.Join(" ", lettersReturned); Console.WriteLine("Cycle: " + (i + 1) + " Expected result: " + example.Name + ". Likely results: " + likelyResults); numberOfExamples++; if (lettersReturned.Contains(example.Name)) { numberOfCorrectResults++; } likelyResults = ""; } } var result = ((float)numberOfCorrectResults / (float)numberOfExamples) * 100; Console.WriteLine("Accuraty rate of Network: " + result + "%"); Console.ReadLine(); }
public static ObservableCollection <Cycle> BuildCyclesFromDataset(AlphabetDataset trainAlphabet, AlphabetDataset validationAlphabet, AlphabetDataset testAlphabet) { var cycles = new ObservableCollection <Cycle>(); var imagesPerLetterTrain = trainAlphabet.Letters.FirstOrDefault().ImagesPath.Count; var imagesPerLetterValidation = validationAlphabet.Letters.FirstOrDefault().ImagesPath.Count; var imagesPerLetterTest = testAlphabet.Letters.FirstOrDefault().ImagesPath.Count; var letterCount = trainAlphabet.Letters.Count; for (int i = 0; i < imagesPerLetterTrain; i++) { var cycle = new Cycle(); for (int j = 0; j < letterCount; j++) { var letter = trainAlphabet.Letters[j]; var example = new Example() { Name = letter.Name, InputValues = letter.GetImagePixels(i), WantedValues = GetLetterWantedValues(letter.Name) }; cycle.ExamplesTrain.Add(example); if (i < imagesPerLetterValidation && i < imagesPerLetterTest) { var letterValidation = validationAlphabet.Letters[j]; var exampleValidation = new Example() { Name = letterValidation.Name, InputValues = letterValidation.GetImagePixels(i), WantedValues = GetLetterWantedValues(letterValidation.Name) }; cycle.ExamplesValidation.Add(exampleValidation); var letterTest = testAlphabet.Letters[j]; var exampleTest = new Example() { Name = letterTest.Name, InputValues = letterTest.GetImagePixels(i), WantedValues = GetLetterWantedValues(letterTest.Name) }; cycle.ExamplesTest.Add(exampleTest); } } cycles.Add(cycle); } return(cycles); }