Advertisement
Guest User

Untitled

a guest
May 29th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <string>
  4. #include <sstream>
  5. #include <stack>
  6. #include <queue>
  7. #include <iostream>
  8. #include <fstream>
  9. #include <ctime>
  10. #include <iomanip>
  11. #include <Windows.h>
  12. #include <cmath>
  13. #define E 2.71828182845904523536
  14.  
  15. using namespace std;
  16.  
  17.  
  18. int liczbaIteracji = 1500;
  19. const int liczbaNeuronow = 20;
  20. const int liczbaWejsc = 5;
  21. const int liczbaWzorcow = 10;
  22. double wspolczynnikUczeniaWarstwyWejsciowej = 0.0001;
  23. double wspolczynnikUczeniaWarstwyUkrytej = 0.01;
  24. double blad = 0.0;
  25. double bladSieci = 0.0;
  26. int numerWzorca = 0;
  27. double wagiWarstwyUkrytej[liczbaNeuronow];
  28. double wagiWarstwyWejsciowej[liczbaWejsc][liczbaNeuronow];
  29. double wartosciWarstwyUkrytej[liczbaNeuronow];
  30. double wynikSieci=0.0;
  31. int wzorceWejsciowe[liczbaWzorcow];
  32. double wzorceWyjsciowe[liczbaWzorcow];
  33.  
  34. void losowanko();
  35. void uczSiec();
  36. void wyswietlWyniki();
  37. void oblicz(int numerWzorca);
  38. double obliczWyjscie(double lacznePobudzenieNeuronu);
  39. void korygujWagiWarstwyUkrytej();
  40. void korygujWagiWarstwyWejsciowej();
  41. double obliczPochodna(double wartoscWarstwyUkrytej);
  42. void obliczBladSieci();
  43.  
  44. int main() {
  45.  
  46. srand(time(0));
  47. losowanko();
  48. uczSiec();
  49. wyswietlWyniki();
  50. system("pause");
  51. // clear();
  52. return EXIT_SUCCESS;
  53. }
  54.  
  55. void losowanko() {
  56.  
  57. for (int i = 0; i < liczbaNeuronow; i++)
  58. {
  59. float losowa = (-100+(rand()%300));
  60. wagiWarstwyUkrytej[i] = losowa/1000 ;
  61.  
  62. for (int j = 0; j < liczbaNeuronow; j++)
  63. {
  64. losowa = (-125 + (rand() % 500)) ;
  65.  
  66. wagiWarstwyWejsciowej[j][i] = losowa/1000;
  67.  
  68. }
  69. }
  70.  
  71. for (int i = 0; i < liczbaWzorcow; i++)
  72. {
  73. wzorceWejsciowe[i] = 1+(rand()%100);
  74. wzorceWyjsciowe[i] = sqrt(wzorceWejsciowe[i]);
  75. }
  76. }
  77.  
  78. void uczSiec() {
  79.  
  80. ofstream bledy;
  81. bledy.open("bledy.txt", ios::out);
  82.  
  83. for (int i = 0; i < liczbaIteracji; i++) {
  84. for (int j = 0; j < liczbaWzorcow; j++) {
  85. numerWzorca = j;
  86. oblicz(numerWzorca);
  87. korygujWagiWarstwyUkrytej();
  88. korygujWagiWarstwyWejsciowej();
  89. }
  90. obliczBladSieci();
  91. bledy << "Blad przy " << i+1 << " iteracji wynosi: " << bladSieci <<endl;
  92. }
  93. bledy.close();
  94.  
  95. }
  96.  
  97. void wyswietlWyniki() {
  98. for (int i = 0; i < liczbaWzorcow; i++)
  99. {
  100. numerWzorca = i;
  101. oblicz(numerWzorca);
  102. double roznica = wzorceWyjsciowe[numerWzorca] - wynikSieci;
  103. cout << fixed;
  104. cout << "Wejscie " << i+1 << " wynosi: " << setprecision(10) << roznica << endl;
  105.  
  106. }
  107. }
  108.  
  109. void oblicz(int numerWzorca) {
  110.  
  111. for (int i = 0; i < liczbaNeuronow; i++) {
  112. wartosciWarstwyUkrytej[i] = 0.0;
  113. for (int j = 0; j < liczbaWejsc; j++) {
  114. wartosciWarstwyUkrytej[i] += wagiWarstwyWejsciowej[j][i] * wzorceWejsciowe[numerWzorca];
  115. }
  116. wartosciWarstwyUkrytej[i] = obliczWyjscie(wartosciWarstwyUkrytej[i]);
  117. }
  118.  
  119. wynikSieci = 0.0;
  120.  
  121. for (int i = 0; i < liczbaNeuronow; i++) {
  122. wynikSieci += wagiWarstwyUkrytej[i] * wartosciWarstwyUkrytej[i];
  123. }
  124. blad = wynikSieci - wzorceWyjsciowe[numerWzorca];
  125. }
  126.  
  127. double obliczWyjscie(double lacznePobudzenieNeuronu) {
  128. return (1 / 1+(pow(E, -lacznePobudzenieNeuronu)));
  129. }
  130.  
  131. void korygujWagiWarstwyUkrytej() {
  132. for (int i = 0; i < liczbaNeuronow; i++) {
  133. wagiWarstwyUkrytej[i] = wagiWarstwyUkrytej[i] - blad*wartosciWarstwyUkrytej[i] * wspolczynnikUczeniaWarstwyUkrytej;
  134. }
  135. }
  136.  
  137. void korygujWagiWarstwyWejsciowej()
  138. {
  139. for (int i = 0; i<liczbaNeuronow; i++) {
  140. for (int j = 0; j<liczbaWejsc; j++) {
  141. wagiWarstwyWejsciowej[j][i] = wagiWarstwyWejsciowej[j][i] - blad*obliczPochodna(wartosciWarstwyUkrytej[i])*wagiWarstwyUkrytej[i] * wspolczynnikUczeniaWarstwyWejsciowej*wzorceWejsciowe[numerWzorca];
  142. }
  143. }
  144. }
  145.  
  146. double obliczPochodna(double wartoscWarstwyUkrytej) {
  147. return (1 - wartoscWarstwyUkrytej)*wartoscWarstwyUkrytej;
  148. }
  149.  
  150. void obliczBladSieci() {
  151. bladSieci = 0.0;
  152. for (int i = 0; i<liczbaWzorcow; i++) {
  153. numerWzorca = i;
  154. oblicz(numerWzorca);
  155. bladSieci = bladSieci + blad*blad;
  156. }
  157. bladSieci = sqrt(bladSieci / liczbaWzorcow);
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement