Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using Accord.Controls;
- using Accord.IO;
- using Accord.Math;
- using Accord.Statistics.Distributions.Univariate;
- using Accord.MachineLearning.Bayes;
- using Accord.Neuro;
- using Accord.Neuro.Learning;
- namespace WpfApp5
- {
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- string line;
- double[,] input = new double[3900, 169];
- for (int i = 0; i < 26; i++)
- {
- System.IO.StreamReader file = new System.IO.StreamReader(@"D:\training\txt\" + Convert.ToChar(i + 97) + ".txt");
- for (int b = i * 150; b < i * 150 + 150; b++)
- {
- line = file.ReadLine();
- for (int j = 0; j < 169; j++)
- {
- input[b, j] = line[j] - 48;
- }
- }
- file.Close();
- }
- double[][] inputs = new double[2600][];
- double[][] inputsTest = new double[1300][];
- int counter, testCounter;
- counter = testCounter = 0;
- for (int i = 0; i < 3900; i++)
- {
- double[] a = new double[169];
- for (int j = 0; j < 169; j++)
- a[j] = input[i, j];
- if (i % 150 < 100)
- {
- inputs[counter] = a;
- counter++;
- }
- else
- {
- inputsTest[testCounter] = a;
- testCounter++;
- }
- }
- /*
- file = new System.IO.StreamReader(@"C:\Users\Paweł\Desktop\txt\b.txt");
- while ((line = file.ReadLine()) != null)
- {
- for (int i = 0; i < 200; i++)
- for (int j = 0; j < 169; j++)
- {
- input[i, j] = line[j] - 48;
- }
- }
- file.Close();
- for (int i = 200; i < 400; i++)
- {
- double[] a = new double[169];
- for (int j = 0; j < 169; j++)
- a[j] = input[i, j];
- inputs[i] = a;
- }
- */
- double[][] outputs = new double[2600][];
- for (int i = 0; i < 100; i++)
- {
- outputs[i] = new double[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 100; i < 200; i++)
- {
- outputs[i] = new double[] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 200; i < 300; i++)
- {
- outputs[i] = new double[] { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 300; i < 400; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 400; i < 500; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 500; i < 600; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 600; i < 700; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 700; i < 800; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 800; i < 900; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 900; i < 1000; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1000; i < 1100; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1100; i < 1200; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1200; i < 1300; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1300; i < 1400; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1400; i < 1500; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1500; i < 1600; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1600; i < 1700; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1700; i < 1800; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1800; i < 1900; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1900; i < 2000; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 2000; i < 2100; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 };
- }
- for (int i = 2100; i < 2200; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 };
- }
- for (int i = 2200; i < 2300; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 };
- }
- for (int i = 2300; i < 2400; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 };
- }
- for (int i = 2400; i < 2500; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 };
- }
- for (int i = 2500; i < 2600; i++)
- {
- outputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
- }
- double[][] testOutputs = new double[1300][];
- for (int i = 0; i < 50; i++)
- {
- testOutputs[i] = new double[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 50; i < 100; i++)
- {
- testOutputs[i] = new double[] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 100; i < 150; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 150; i < 200; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 200; i < 250; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 250; i < 300; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 300; i < 350; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 350; i < 400; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 400; i < 450; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 450; i < 500; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 500; i < 550; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 550; i < 600; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 600; i < 650; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 650; i < 700; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 700; i < 750; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 750; i < 800; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 800; i < 850; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 850; i < 900; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 900; i < 950; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 950; i < 1000; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 };
- }
- for (int i = 1000; i < 1050; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 };
- }
- for (int i = 1050; i < 1100; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 };
- }
- for (int i = 1100; i < 1150; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 };
- }
- for (int i = 1150; i < 1200; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 };
- }
- for (int i = 1200; i < 1250; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 };
- }
- for (int i = 1250; i < 1300; i++)
- {
- testOutputs[i] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
- }
- IActivationFunction function = new SigmoidFunction();
- ActivationNetwork network = new ActivationNetwork(function,
- inputsCount: 169, neuronsCount: new[] {1, 26 });
- BackPropagationLearning teacher = new BackPropagationLearning(network);
- int x = 20;
- double[] error = new double[x];
- for (int j = 0; j < x; j++)
- {
- error[j] = teacher.RunEpoch(inputs, outputs);
- }
- int[] answers = inputs.Apply(network.Compute).GetColumn(0).Apply(System.Math.Sign);
- int correctAnswers = 0;
- for(int i =0; i < inputsTest.Length; i++)
- {
- double [] testAnswers = network.Compute(inputsTest[i]);
- int idTest, idOutput, maxTest, maxOutput;
- idTest = -1;
- idOutput = -2;
- maxTest = maxOutput = 0;
- foreach(int j in testAnswers)
- {
- if (testAnswers[j] > maxTest)
- idTest = j;
- if (testOutputs[i][j] > maxOutput)
- idOutput = j;
- }
- if (idTest == idOutput)
- correctAnswers++;
- }
- text.Content = String.Join("\n", error);
- text2.Content = String.Join("\n", network.Compute(inputs[0]));
- text3.Content = String.Join("\n", network.Compute(inputs[150]));
- text1.Content = "Corret " + correctAnswers + " from " + inputsTest.Length;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement