oleg95111

Untitled

Dec 7th, 2017
894
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // neuralNetwork.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "math.h"
  6. #include <iostream>
  7.  
  8.  
  9. //количество элементов в столбце
  10. #define column 5
  11. //количество элементов в ряду
  12. #define row 3
  13. //Количество данных для обучения
  14. #define numberDataTraining 10000
  15. using namespace std;
  16. //Набор данных
  17. struct Number {
  18. //Value for learn
  19. const bool num0[column][row] = {{ 1,1,1 },
  20. { 1,0,1 },
  21. { 1,0,1 },
  22. { 1,0,1 },
  23. { 1,1,1 } };
  24.  
  25. const bool num1[column][row] = { { 0,0,1 },
  26. { 0,0,1 },
  27. { 0,0,1 },
  28. { 0,0,1 },
  29. { 0,0,1 } };
  30.  
  31. const bool num2[column][row] = { { 1,1,1 },
  32. { 0,0,1 },
  33. { 1,1,1 },
  34. { 1,0,0 },
  35. { 1,1,1 } };
  36.  
  37. const bool num3[column][row] = { { 1,1,1 },
  38. { 0,0,1 },
  39. { 1,1,1 },
  40. { 0,0,1 },
  41. { 1,1,1 } };
  42.  
  43. const bool num4[column][row] = { { 1,0,1 },
  44. { 1,0,1 },
  45. { 1,1,1 },
  46. { 0,0,1 },
  47. { 0,0,1 } };
  48.  
  49. const bool num5[column][row] = { { 1,1,1 },
  50. { 1,0,0 },
  51. { 1,1,1 },
  52. { 0,0,1 },
  53. { 1,1,1 } };
  54.  
  55. const bool num6[column][row] = { { 1,1,1 },
  56. { 1,0,0 },
  57. { 1,1,1 },
  58. { 1,0,1 },
  59. { 1,1,1 } };
  60.  
  61. const bool num7[column][row] = { { 1,1,1 },
  62. { 0,0,1 },
  63. { 0,0,1 },
  64. { 0,0,1 },
  65. { 0,0,1 } };
  66.  
  67. const bool num8[column][row] = { { 1,1,1 },
  68. { 1,0,1 },
  69. { 1,1,1 },
  70. { 1,0,1 },
  71. { 1,1,1 } };
  72.  
  73. const bool num9[column][row] = { { 1,1,1 },
  74. { 1,0,1 },
  75. { 1,1,1 },
  76. { 0,0,1 },
  77. { 1,1,1 } };
  78. //Тестовый набор 5
  79. bool num10[column][row] = { { 1,1,1 },
  80. { 1,0,0 },
  81. { 1,1,1 },
  82. { 0,0,0 },
  83. { 1,1,1 } };
  84.  
  85. bool num11[column][row] = { { 1,1,1 },
  86. { 1,0,0 },
  87. { 0,1,0 },
  88. { 0,0,1 },
  89. { 1,1,1 } };
  90.  
  91. bool num12[column][row] = { { 1,1,1 },
  92. { 1,0,0 },
  93. { 0,1,1 },
  94. { 0,0,1 },
  95. { 1,1,1 } };
  96.  
  97. bool num13[column][row] = { { 1,1,0 },
  98. { 1,0,0 },
  99. { 1,1,1 },
  100. { 0,0,1 },
  101. { 1,1,1 } };
  102.  
  103. bool num14[column][row] = { { 1,1,0 },
  104. { 1,0,0 },
  105. { 1,1,1 },
  106. { 0,0,1 },
  107. { 0,1,1 } };
  108.  
  109. bool num15[column][row] = { { 1,1,1 },
  110. { 1,0,0 },
  111. { 1,0,1 },
  112. { 0,0,1 },
  113. { 1,1,1 } };
  114.  
  115. bool num16[column][row] = { { 1,1,1 },
  116. { 0,0,0 },
  117. { 1,1,1 },
  118. { 0,0,0 },
  119. {1,1,1} };
  120. //тестовый набор 6
  121. bool num17[column][row] = { { 1,1,1 },
  122. { 1,0,0 },
  123. { 1,1,1 },
  124. { 1,0,1 },
  125. { 1,1,1 } };
  126.  
  127. bool num18[column][row] = { { 1,1,1 },
  128. { 1,0,0 },
  129. { 1,0,1 },
  130. { 1,0,1 },
  131. { 1,1,1 } };
  132.  
  133. }num;
  134.  
  135. //класс нейрона
  136. class Neural {
  137. //входной параметр
  138. bool number[column][row];
  139. //весы входных параметров
  140. int weight[column][row];
  141. //порог функции активации
  142. int bias;
  143. public:
  144. Neural(int bias=7);
  145. void setNumber(int number);
  146. void setNumber(const bool number[column][row]);
  147. void increase();
  148. void decrease();
  149. bool proceed();
  150. void show();
  151. };
  152. //Начальная инициализация весов
  153. Neural::Neural(int bias) {
  154. this->bias = bias;
  155. for (int i = 0; i < column; i++) {
  156. for (int j = 0; j < row; j++) {
  157. weight[i][j] = 0;
  158. }
  159. }
  160. }
  161. //Вывод весоов на экран
  162. void Neural::show() {
  163. for (int i = 0; i < column; i++) {
  164. for (int j = 0; j < row; j++) {
  165. cout << weight[i][j]<<" ";
  166. }
  167. cout << endl;
  168. }
  169. }
  170. //Функция активации
  171. bool Neural::proceed() {
  172. int result = 0;
  173. for (int i = 0; i < column; i++) {
  174. for (int j = 0; j < row; j++) {
  175. result += (number[i][j] * weight[i][j]);
  176. }
  177. }
  178. return (result >= bias);
  179.  
  180. }
  181. //установка входного параметра
  182. void Neural::setNumber(const bool number[column][row]) {
  183. for (int i = 0; i < column; i++) {
  184. for (int j = 0; j < row; j++) {
  185. this->number[i][j] = number[i][j];
  186. }
  187. }
  188. }
  189. //установка входного параметра
  190. void Neural::setNumber(int number) {
  191. switch(number){
  192. case 0:setNumber(num.num0); break;
  193. case 1:setNumber(num.num1); break;
  194. case 2:setNumber(num.num2); break;
  195. case 3:setNumber(num.num3); break;
  196. case 4:setNumber(num.num4); break;
  197. case 5:setNumber(num.num5); break;
  198. case 6:setNumber(num.num6); break;
  199. case 7:setNumber(num.num7); break;
  200. case 8:setNumber(num.num8); break;
  201. case 9:setNumber(num.num9);
  202. }
  203. }
  204. //Увеличение весов
  205. void Neural::increase() {
  206. for (int i = 0; i < column; i++) {
  207. for (int j = 0; j < row; j++) {
  208. if (number[i][j]) {
  209. weight[i][j] += 1;
  210. }
  211. }
  212. }
  213. }
  214. //Уменьшение весов
  215. void Neural::decrease() {
  216. for (int i = 0; i < column; i++) {
  217. for (int j = 0; j < row; j++) {
  218. if (number[i][j]) {
  219. weight[i][j] -= 1;
  220. }
  221. }
  222. }
  223. }
  224. //функция обучения
  225. void training(Neural *neural, int number);
  226. int main()
  227. {
  228. Number number;
  229. //Установка порога функции активации
  230. Neural *neural = new Neural(9);
  231. //
  232. training(neural,5);
  233. neural->show();
  234. cout << "=============CHECKING THE RECOGNITION OF NUMBERS=================" << endl;
  235. neural->setNumber(0);
  236. cout << "5 is 0 ? " << neural->proceed() << endl;
  237. neural->setNumber(1);
  238. cout << "5 is 1 ? " <<neural->proceed() << endl;
  239. neural->setNumber(2);
  240. cout << "5 is 2 ? " << neural->proceed() << endl;
  241. neural->setNumber(3);
  242. cout << "5 is 3 ? " << neural->proceed() << endl;
  243. neural->setNumber(4);
  244. cout << "5 is 4 ? " << neural->proceed() << endl;
  245. neural->setNumber(5);
  246. cout << "5 is 5 ? " << neural->proceed() << endl;
  247. neural->setNumber(6);
  248. cout << "5 is 6 ? " << neural->proceed() << endl;
  249. neural->setNumber(7);
  250. cout << "5 is 7 ? " << neural->proceed() << endl;
  251. neural->setNumber(8);
  252. cout << "5 is 8 ? " << neural->proceed() << endl;
  253. neural->setNumber(9);
  254. cout << "5 is 9 ? " << neural->proceed() << endl;
  255. //*********************************************************
  256. cout<<"================RECOGNITION 5===================================="<<endl;
  257. neural->setNumber(num.num10);
  258. cout << "5 is 51 ? " << (bool)neural->proceed() << endl;
  259. neural->setNumber(num.num11);
  260. cout << "5 is 52 ? " << (bool)neural->proceed() << endl;
  261. neural->setNumber(num.num12);
  262. cout << "5 is 53 ? " << (bool)neural->proceed() << endl;
  263. neural->setNumber(num.num13);
  264. cout << "5 is 54 ? " << (bool)neural->proceed() << endl;
  265. neural->setNumber(num.num14);
  266. cout << "5 is 55 ? " << (bool)neural->proceed() << endl;
  267. neural->setNumber(num.num15);
  268. cout << "5 is 56 ? " << (bool)neural->proceed() << endl;
  269. neural->setNumber(num.num16);
  270. cout << "5 is 57 ? " << (bool)neural->proceed() << endl;
  271. cout << "=================================================================" << endl;
  272. }
  273. void training(Neural *neural,int number) {
  274.  
  275. for (int i = 0; i <numberDataTraining; i++) {
  276. int random_number =rand() % 10;
  277. neural->setNumber(random_number);
  278. if (random_number == number) {
  279. if (!(neural->proceed())) neural->increase();
  280. }
  281. else {
  282. if (neural->proceed()) neural->decrease();
  283. }
  284. }
  285. cout << "=================================" << endl;
  286. }
RAW Paste Data