Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.81 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. using Accord.Controls;
  16. using Accord.IO;
  17. using Accord.Math;
  18. using Accord.Statistics.Distributions.Univariate;
  19. using Accord.MachineLearning.Bayes;
  20. using Accord.Neuro;
  21. using Accord.Neuro.Learning;
  22.  
  23. namespace WpfApp5
  24. {
  25. public partial class MainWindow : Window
  26. {
  27. public MainWindow()
  28. {
  29. InitializeComponent();
  30.  
  31. string line;
  32. double[,] input = new double[3900, 169];
  33.  
  34. for (int i = 0; i < 26; i++)
  35. {
  36. System.IO.StreamReader file = new System.IO.StreamReader(@"D:\training\txt\" + Convert.ToChar(i + 97) + ".txt");
  37. for (int b = i * 150; b < i * 150 + 150; b++)
  38. {
  39. line = file.ReadLine();
  40. for (int j = 0; j < 169; j++)
  41. {
  42. input[b, j] = line[j] - 48;
  43. }
  44. }
  45. file.Close();
  46. }
  47. double[][] inputs = new double[2600][];
  48. double[][] inputsTest = new double[1300][];
  49. int counter, testCounter;
  50. counter = testCounter = 0;
  51. for (int i = 0; i < 3900; i++)
  52. {
  53. double[] a = new double[169];
  54. for (int j = 0; j < 169; j++)
  55. a[j] = input[i, j];
  56.  
  57.  
  58. if (i % 150 < 100)
  59. {
  60. inputs[counter] = a;
  61. counter++;
  62. }
  63. else
  64. {
  65. inputsTest[testCounter] = a;
  66. testCounter++;
  67. }
  68. }
  69.  
  70.  
  71.  
  72. /*
  73. file = new System.IO.StreamReader(@"C:\Users\Paweł\Desktop\txt\b.txt");
  74. while ((line = file.ReadLine()) != null)
  75. {
  76. for (int i = 0; i < 200; i++)
  77. for (int j = 0; j < 169; j++)
  78. {
  79. input[i, j] = line[j] - 48;
  80. }
  81. }
  82. file.Close();
  83.  
  84. for (int i = 200; i < 400; i++)
  85. {
  86. double[] a = new double[169];
  87. for (int j = 0; j < 169; j++)
  88. a[j] = input[i, j];
  89.  
  90. inputs[i] = a;
  91. }
  92. */
  93. double[][] outputs = new double[2600][];
  94. for (int i = 0; i < 100; i++)
  95. {
  96. 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 };
  97.  
  98. }
  99. for (int i = 100; i < 200; i++)
  100. {
  101. 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 };
  102.  
  103. }
  104. for (int i = 200; i < 300; i++)
  105. {
  106. 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 };
  107.  
  108. }
  109. for (int i = 300; i < 400; i++)
  110. {
  111. 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 };
  112.  
  113. }
  114. for (int i = 400; i < 500; i++)
  115. {
  116. 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 };
  117.  
  118. }
  119. for (int i = 500; i < 600; i++)
  120. {
  121. 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 };
  122.  
  123. }
  124. for (int i = 600; i < 700; i++)
  125. {
  126. 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 };
  127.  
  128. }
  129. for (int i = 700; i < 800; i++)
  130. {
  131. 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 };
  132.  
  133. }
  134. for (int i = 800; i < 900; i++)
  135. {
  136. 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 };
  137.  
  138. }
  139. for (int i = 900; i < 1000; i++)
  140. {
  141. 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 };
  142.  
  143. }
  144. for (int i = 1000; i < 1100; i++)
  145. {
  146. 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 };
  147.  
  148. }
  149. for (int i = 1100; i < 1200; i++)
  150. {
  151. 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 };
  152.  
  153. }
  154. for (int i = 1200; i < 1300; i++)
  155. {
  156. 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 };
  157.  
  158. }
  159. for (int i = 1300; i < 1400; i++)
  160. {
  161. 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 };
  162.  
  163. }
  164. for (int i = 1400; i < 1500; i++)
  165. {
  166. 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 };
  167.  
  168. }
  169. for (int i = 1500; i < 1600; i++)
  170. {
  171. 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 };
  172.  
  173. }
  174. for (int i = 1600; i < 1700; i++)
  175. {
  176. 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 };
  177.  
  178. }
  179. for (int i = 1700; i < 1800; i++)
  180. {
  181. 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 };
  182.  
  183. }
  184. for (int i = 1800; i < 1900; i++)
  185. {
  186. 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 };
  187.  
  188. }
  189. for (int i = 1900; i < 2000; i++)
  190. {
  191. 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 };
  192.  
  193. }
  194. for (int i = 2000; i < 2100; i++)
  195. {
  196. 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 };
  197.  
  198. }
  199. for (int i = 2100; i < 2200; i++)
  200. {
  201. 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 };
  202.  
  203. }
  204. for (int i = 2200; i < 2300; i++)
  205. {
  206. 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 };
  207.  
  208. }
  209. for (int i = 2300; i < 2400; i++)
  210. {
  211. 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 };
  212.  
  213. }
  214. for (int i = 2400; i < 2500; i++)
  215. {
  216. 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 };
  217.  
  218. }
  219. for (int i = 2500; i < 2600; i++)
  220. {
  221. 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 };
  222.  
  223. }
  224.  
  225.  
  226.  
  227.  
  228.  
  229. double[][] testOutputs = new double[1300][];
  230. for (int i = 0; i < 50; i++)
  231. {
  232. 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 };
  233.  
  234. }
  235. for (int i = 50; i < 100; i++)
  236. {
  237. 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 };
  238.  
  239. }
  240. for (int i = 100; i < 150; i++)
  241. {
  242. 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 };
  243.  
  244. }
  245. for (int i = 150; i < 200; i++)
  246. {
  247. 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 };
  248.  
  249. }
  250. for (int i = 200; i < 250; i++)
  251. {
  252. 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 };
  253.  
  254. }
  255. for (int i = 250; i < 300; i++)
  256. {
  257. 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 };
  258.  
  259. }
  260. for (int i = 300; i < 350; i++)
  261. {
  262. 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 };
  263.  
  264. }
  265. for (int i = 350; i < 400; i++)
  266. {
  267. 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 };
  268.  
  269. }
  270. for (int i = 400; i < 450; i++)
  271. {
  272. 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 };
  273.  
  274. }
  275. for (int i = 450; i < 500; i++)
  276. {
  277. 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 };
  278.  
  279. }
  280. for (int i = 500; i < 550; i++)
  281. {
  282. 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 };
  283.  
  284. }
  285. for (int i = 550; i < 600; i++)
  286. {
  287. 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 };
  288.  
  289. }
  290. for (int i = 600; i < 650; i++)
  291. {
  292. 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 };
  293.  
  294. }
  295. for (int i = 650; i < 700; i++)
  296. {
  297. 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 };
  298.  
  299. }
  300. for (int i = 700; i < 750; i++)
  301. {
  302. 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 };
  303.  
  304. }
  305. for (int i = 750; i < 800; i++)
  306. {
  307. 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 };
  308.  
  309. }
  310. for (int i = 800; i < 850; i++)
  311. {
  312. 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 };
  313.  
  314. }
  315. for (int i = 850; i < 900; i++)
  316. {
  317. 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 };
  318.  
  319. }
  320. for (int i = 900; i < 950; i++)
  321. {
  322. 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 };
  323.  
  324. }
  325. for (int i = 950; i < 1000; i++)
  326. {
  327. 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 };
  328.  
  329. }
  330. for (int i = 1000; i < 1050; i++)
  331. {
  332. 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 };
  333.  
  334. }
  335. for (int i = 1050; i < 1100; i++)
  336. {
  337. 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 };
  338.  
  339. }
  340. for (int i = 1100; i < 1150; i++)
  341. {
  342. 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 };
  343.  
  344. }
  345. for (int i = 1150; i < 1200; i++)
  346. {
  347. 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 };
  348.  
  349. }
  350. for (int i = 1200; i < 1250; i++)
  351. {
  352. 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 };
  353.  
  354. }
  355. for (int i = 1250; i < 1300; i++)
  356. {
  357. 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 };
  358.  
  359. }
  360.  
  361. IActivationFunction function = new SigmoidFunction();
  362.  
  363. ActivationNetwork network = new ActivationNetwork(function,
  364. inputsCount: 169, neuronsCount: new[] {1, 26 });
  365.  
  366.  
  367.  
  368. BackPropagationLearning teacher = new BackPropagationLearning(network);
  369. int x = 20;
  370. double[] error = new double[x];
  371. for (int j = 0; j < x; j++)
  372. {
  373. error[j] = teacher.RunEpoch(inputs, outputs);
  374. }
  375.  
  376. int[] answers = inputs.Apply(network.Compute).GetColumn(0).Apply(System.Math.Sign);
  377. int correctAnswers = 0;
  378. for(int i =0; i < inputsTest.Length; i++)
  379. {
  380. double [] testAnswers = network.Compute(inputsTest[i]);
  381. int idTest, idOutput, maxTest, maxOutput;
  382. idTest = -1;
  383. idOutput = -2;
  384. maxTest = maxOutput = 0;
  385. foreach(int j in testAnswers)
  386. {
  387. if (testAnswers[j] > maxTest)
  388. idTest = j;
  389. if (testOutputs[i][j] > maxOutput)
  390. idOutput = j;
  391. }
  392. if (idTest == idOutput)
  393. correctAnswers++;
  394. }
  395. text.Content = String.Join("\n", error);
  396. text2.Content = String.Join("\n", network.Compute(inputs[0]));
  397. text3.Content = String.Join("\n", network.Compute(inputs[150]));
  398. text1.Content = "Corret " + correctAnswers + " from " + inputsTest.Length;
  399.  
  400. }
  401. }
  402. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement