internal void train(UIElementCollection children) { bool[] input = new bool[16 * 16]; foreach (Rectangle rect in children) { int top = Convert.ToInt32(rect.GetValue(Canvas.TopProperty)); int left = Convert.ToInt32(rect.GetValue(Canvas.LeftProperty)); input[top * 16 + left] = true; } bool[] output = (from e in oneHotEncoding where e.Value == trainChar select e.Key).First(); TrainingData trainingData = new TrainingData() { input = input, output = output }; training.Add(trainingData); singleLayerPerceptron.train(input, output); }
public MainWindowViewModel() { foreach (char c in alphabet) { bool[] code = new bool[alphabet.Length]; code[alphabet.IndexOf(c)] = true; oneHotEncoding.Add(code, c); } try { using (FileStream fs = File.Open(slpFilePath, FileMode.Open)) { BinaryFormatter binaryFormatter = new BinaryFormatter(); singleLayerPerceptron = (SingleLayerPerceptron)binaryFormatter.Deserialize(fs); } } catch (Exception e) { singleLayerPerceptron = new SingleLayerPerceptron(16 * 16, alphabet.Length); try { #region Load Trainingdata and Train Single Layer Perceptron List <string> lines = new List <string>(); using (StreamReader streamReader = new StreamReader(File.Open(trainingFilePath, FileMode.OpenOrCreate))) { while (!streamReader.EndOfStream) { lines.Add(streamReader.ReadLine()); } } foreach (string line in lines) { TrainingData trainingData = new TrainingData(); string[] splittedLine = line.Split(' '); string inputString = splittedLine[0]; string outputString = splittedLine[1]; bool[] input = new bool[inputString.Length]; for (int i = 0; i < inputString.Length - 1; i++) { if (inputString[i] == '0') { input[i] = false; } else if (inputString[i] == '1') { input[i] = true; } } trainingData.input = input; //Doublecoding :( bool[] output = new bool[splittedLine[1].Length]; for (int i = 0; i < outputString.Length - 1; i++) { if (outputString[i] == '0') { output[i] = false; } else if (outputString[i] == '1') { output[i] = true; } } trainingData.output = output; training.Add(trainingData); } foreach (var item in training) { singleLayerPerceptron.train(item.input, item.output); } #endregion } catch (Exception) { //Nothing special happens here since we initialized training as new list already. } } }