Advertisement
blackpab

dasdasdasd

Apr 18th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.34 KB | None | 0 0
  1. lr=75; %learning rate arbitralnie jako 2, lr ma wplyw na szybkosc uczenia sieci
  2. %duże lr to szybka zbieżność algorytmu, ale niekiedy brak stabilnosci metody
  3. %małe lr to powolna zbieżność, ale stabilnosc algorytmu
  4.  
  5. d=[265.5/268.5 268.5/268.5 268.0/268.5 270.0/268.5]
  6. % wzorzec na wyjsciu z sieci,
  7.  
  8. n=100;
  9. % liczba krokow obliczeniowych w procesie uczenia sieci,
  10. % jeden krok nazywa sie epoka
  11. % to kryterium zatrzymania programu zmienimy na kryterium dokladnosci metody
  12.  
  13. w111=[1:101]; % waga pierwszej warstwy pierwszej jednostki, pierwsze wejscie
  14. w112=[1:101]; % waga pierwszej warstwy pierwszej jednostki, drugie wejscie
  15. w121=[1:101]; % waga pierwszej warstwy drugiej jednostki, pierwsze wejscie
  16. w122=[1:101]; % waga pierwszej warstwy drugiej jednostki, drugie wejscie
  17.  
  18. w21=[1:101]; % waga drugiej warstwy pierwsze wejscie
  19. w22=[1:101]; % waga drugiej warstwy drugie wejscie
  20.  
  21. beta=[1:100]; % wektory pomocnicze
  22. beta21=[1:100];
  23. beta22=[1:100];
  24. bb=[1:100];
  25.  
  26. w1s2=[1:101]; % wektor dla wag skrosnych, wejscie 1 z jednostka 2
  27. w2s2=[1:101]; % wektor dla wag skrosnych, wejscie 2 z jednostka 2
  28. w3s1=[1:101]; % wektor dla wag skrosnych, wejscie 3 z jednostka 1
  29. w4s1=[1:101]; % wektor dla wag skrosnych, wejscie 4 z jednostka 1
  30.  
  31. dw111=[1:100]; % wartosc o jaka zmieni sie waga w111 w danym kroku obliczeniowym,
  32. dw112=[1:100]; % wartosc o jaka zmieni sie waga w112 w danym kroku obliczeniowym,
  33. dw121=[1:100]; % wartosc o jaka zmieni sie waga w121 w danym kroku obliczeniowym,
  34. dw122=[1:100]; % poniewaz chcemy wyliczyc jak zmieniaja sie wszystkie wagi
  35.  
  36. dw1s2=[1:100]; % jest to wektor do zmiennej wagi ktore laczy wejscie 1 z jednostka druga
  37. dw2s2=[1:100]; % jest to wektor do zmiennej wagi ktore laczy wejscie 2 z jednostka druga
  38. dw3s1=[1:100]; % jest to wektor do zmiennej wagi ktore laczy wejscie 3 z jednostka pierw.
  39. dw4s1=[1:100]; % jest to wektor do zmiennej wagi ktore laczy wejscie 4 z jednostka pierw.
  40.  
  41. dw21=[1:100]; % wektor dla zmiany wagi w21
  42. dw22=[1:100]; % wektor dla zmiany wagi w22
  43.  
  44. blad=[1:100]; % blad sredniokwadratowy
  45. % blad= suma ((d-u)*(d-u))
  46.  
  47. u1=[1:4]; % wektor wejsc spolki gieldowej INTER CARS S.A.
  48. u2=[1:4]; % wektor wejsc spolki gieldowej GRUPA ŻYWIEC S.A.
  49. u3=[1:4]; % wektor wejsc spolki gieldowej CD PROJEKT S.A.
  50. u4=[1:4]; % wektor wejsc spolki gieldowej DĘBICA S.A.
  51.  
  52. u1(1)=264.5/268.5; %sygnaly wejsc INTER CARS S.A.
  53. u1(2)=265.5/268.5;
  54. u1(3)=1;
  55. u1(4)=268.0/268.5;
  56.  
  57. u2(1)=1; % wektor wejsc spolki gieldowej GRUPA ŻYWIEC S.A.
  58. u2(2)=482.0/488.0;
  59. u2(3)=482.0/488.0;
  60. u2(4)=482.0/488.0;
  61.  
  62. u3(1)=106.0/109.8; %sygnaly wejsc GRUPA CD PROJEKT S.A.
  63. u3(2)=103.6/109.8;
  64. u3(3)=1;
  65. u3(4)=108.2/109.8;
  66.  
  67. u4(1)=1; %sygnaly wejsc DĘBICA S.A.
  68. u4(2)=1;
  69. u4(3)=117.5/118.0;
  70. u4(4)=1;
  71.  
  72. %poczatkowe wartosci wag
  73.  
  74. w111(1)=-0.8;
  75. w112(1)=0.77;
  76. w121(1)=0.82;
  77. w122(1)=-0.86;
  78.  
  79. w1s2(1)=-0.9;
  80. w2s2(1)=0.3;
  81. w3s1(1)=0.5;
  82. w4s1(1)=-0.7;
  83.  
  84. w21(1)=0.95; %wartosci poczatkowe dla warstwy drugiej
  85. w22(1)=-0.92;
  86.  
  87. % schemat ktory zostal zaproponowany to "warstwa jednostka wejscie" dla
  88. % notacji indeksow
  89. % warstwa, mamy dwie warstwy
  90. % jednostka, mamy trzy jednostki
  91. % wejscie, dla pierwszej warstwy mamy cztery wejscia
  92.  
  93. % w tym miejscu rozpoczyna sie uczenie sieci neuronowej
  94. % uczenia jest prowadzone metoda back propagation, to znaczy wstecznej
  95. % propagacji bledu, jest to metoda optymalizacji statycznej
  96. % uczenie sieci jest przewidziane na 100 krokow czyli epok dla metody optymalizacji
  97. % uczenie sieci polega na takim dobrze wag, aby blad sredniokwadtratowy
  98. % na wyjsciu sieci byl minimalny
  99.  
  100. for i=1:n, % tu jest wielokrotnie wykonanie algorytmu uczenia dla n=100 krokow
  101. % obliczeniowych czyli epok, n-100 jest podane arbitralnie
  102.  
  103. dw111(i)=0; % zerowanie przyrostow wag
  104. dw112(i)=0;
  105. dw121(i)=0;
  106. dw122(i)=0;
  107.  
  108. dw1s2(i)=0; % zerowanie przyrostow wag skosnych
  109. dw2s2(i)=0;
  110. dw3s1(i)=0;
  111. dw4s1(i)=0;
  112.  
  113. dw21(i)=0; % zerowanie przyrostow wag w warstwie drugiej
  114. dw22(i)=0;
  115.  
  116. bb(i)=0; % zerujemy wektor pomocnicze
  117. yy21(i)=0; % zerujemy drugi wektor pomocniczy
  118.  
  119. % dla kazdego kroku obliczeniowego (epoki) na wejscie sieci podajemy 4 wartosci
  120. % sygnalow wejsciowych, w postaci liczbowej
  121. % po 4 wartosci dla kazdego wejscia
  122. % w glownej petli programu tej od 1 do n jest dodatkowa petla dla kazdego sygnalu
  123.  
  124. for j=1:4, % zl1 to sygnal po sumowaniu w wezle sumacujnym, przed funkcja przejscia
  125. % dla jednostki pierwszej
  126. % zl2 to sygnal po sumowaniu w wezle sumacujnym, przed funkcja przejscia
  127. % dla jednostki drugiej
  128.  
  129. z11=(u1(j).*w111(i)+u2(j).*w112(i)+u3(j).*w3s1(i)+u4(j).*w4s1(i));
  130. s11=(1/(1+exp(-z11))); % to jest sygnal po funkcji przejscia, funkcja sigmoidalna
  131. z12=(u3(j).*w121(i)+u4(j).*w122(i)+u1(j).*w1s2(i)+u2(j).*w2s2(i));
  132. s12=(1/(1+exp(-z12))); % to jest funkcja sigmoidalna dla drugiej jednostki pierwszej warstwy
  133. z21=(s11.*w21(i)+s12.*w22(i)); %te sume liczymy tylko raz ponieważ jest tylko jedna
  134. % jednsotka w drugiej warstwie sieci
  135. s21=(1/(1+exp(-z21))); % to jest sygnal na wyjsciu sieci zatem mozemy
  136.  
  137. % obliczac blad sredniokwadratowy, poprzez sumowanie bledu dla 4 wektorow
  138. % wejsciowych, indeks j dla kazdej epoki indeks i
  139. % blad sreddniokwadratowy okreslamy jako bb
  140.  
  141. bb(i)=bb(i)+1/2*((s21-d(j))^2); % blad jako suma, to jest error na wyjsciu z sieci
  142.  
  143. % bedziemy obliczac zmiane wag metoda gradientowa, metoda gradientu prostego
  144.  
  145. yy21(i)=yy21(i)+s21*(1-s21);
  146.  
  147. % obliczymy zmiany kazdej wagi dla kazdej jednostki
  148. % Zaczynamy od warstwy drugiej poniewaz stosujemy algorytm wstecznej
  149. % backpropagation bp propagacji bleldu
  150. % obliczymy wspolczynnik beta jako pochodna bledu sredniokwadratowego
  151.  
  152. % s21 to sygnal który jest na wyjsciu sieci
  153. % d(j) to sygnal podany na wyjscie sieci jako wzorzec wartosci, która oczekujemy
  154. % na wyjsciu sieci
  155.  
  156. % zmiana wagi dw21 okreslona wzorem wynikajacym z obliczenia pochodnej
  157. % sygnalu wzgledem wagi, gdy chcemy zmienic wage w21 obliczamy pochodna
  158. % wzgledem tej wagi jest dana wzorem
  159. % dla dociekliwych prosze wyprowadzic ten wzor
  160.  
  161. beta(i)=s21-d(j); % pochodna bledu, bo blad jest siedniokwatratowy
  162. % pochodna funkcji sigmoidalnej: (s21*(1-s21))
  163. % s11 to sygnal z pierwszej jednostki
  164.  
  165. dw21(i)=dw21(i)+s11*(s21*(1-s21))*beta(i);
  166. dw22(i)=dw22(i)+s12*(s21*(1-s21))*beta(i);
  167.  
  168. beta21(i)=w21(i)*(s21*(1-s21))*beta(i); % blad w srodku sieci, rzutowany
  169. % w torze sygnalu wagi w21
  170. beta22(i)=w22(i)*(s21*(1-s21))*beta(i); % w torze sygnalu wagi w22
  171.  
  172. % mozemy teraz obliczyc zmiany wag w pierwszej warstwie
  173. % liczymy tu o jaka wartosc nalezy zmienic kazda z wag aby blad na wyjsciu sieci
  174.  
  175. dw111(i)=dw111(i)+u1(j)*(s11*(1-s11))*beta21(i);
  176. dw112(i)=dw112(i)+u2(j)*(s11*(1-s11))*beta21(i);
  177. dw121(i)=dw121(i)+u3(j)*(s12*(1-s12))*beta22(i);
  178. dw122(i)=dw122(i)+u4(j)*(s12*(1-s12))*beta22(i);
  179.  
  180. dw1s2(i)=dw1s2(i)+u1(1)*(s12*(1-s12))*beta22(i);
  181. dw2s2(i)=dw2s2(i)+u2(1)*(s12*(1-s12))*beta22(i);
  182. dw3s1(i)=dw3s1(i)+u3(1)*(s11*(1-s11))*beta21(i);
  183. dw4s1(i)=dw4s1(i)+u4(1)*(s11*(1-s11))*beta21(i);
  184.  
  185. % do optymalizacji zmiany wag stosujemy metode gradientu
  186. % minimalizacji bledu pomiedzy sygnalem na wyjsciu sieci a zadanym
  187. % wzorcem, tu jest dany wzorzec d
  188. % stad obliczamy pochodne dla zmiany wagi
  189. % minimum wystepuje wtedy gdy zmiany wag daza do zera !!!!
  190. % poniewaz warunek konieczny na minimum to jest zerowanie pochodnej
  191. % tu sa obliczane wartosci pomocnicze
  192.  
  193. end % koniec petli indekoswanej indeksem j czyli od 1 do 4
  194.  
  195. % dlatego ze w kazdym sygnale wejsciowym bylo zawartych po 4 elementy
  196. % po zakonczeniu obliczenia zmiany wag dla
  197. % kazdego z 4 sygnalow na wejsciu mozemy zmiwnic wagi
  198. % zmiany wag to jedyna czynnosc ktora mozemy zrobic w trakcie uczenia sie
  199. % suma bledow jest dzielona przez dwa
  200.  
  201. blad(i)=bb(i);
  202.  
  203. % tu jest obliczana nowa waga
  204. % nowa waga to jest dotychczasowa wartosc wagi minus lerning rate
  205. % wspolczynnik forsowania uczenia sieci razy
  206. % obliczona wartosc zmiany wagi
  207. % minus bo liczymy antygradient a nie gradient poniewaz minimalizujemy
  208. % wartosc funkcji bledu sredniokwadratowego
  209.  
  210. % minus bierze sie stad, ze mamy problem minimalizacji
  211. % gdyby byl problem maksymalizacji bledu znak bylby plus
  212. % liczymy antygradient dla zmiany wagi stad znak minus
  213. % nowa waga to strata waga minus lr*dw21(i)
  214. % zmianiamy wartosci wszystkich wag, czyli tu 10 wag w tym przykladzie
  215.  
  216. w21(i+1)=w21(i)-lr*dw21(i);
  217. w22(i+1)=w22(i)-lr*dw22(i);
  218.  
  219. w111(i+1)=w111(i)-lr*dw111(i); % tu jest forsowanie procesu uczenia, wspolczynnik
  220. w112(i+1)=w112(i)-lr*dw112(i); % lr to jest lerning rate
  221. % lr jest dobierany arbiralnie
  222. % ani zaduzy ani zamaly
  223.  
  224. w121(i+1)=w121(i)-lr*dw121(i);
  225. w122(i+1)=w122(i)-lr*dw122(i);
  226.  
  227. w1s2(i+1)=w1s2(i)-lr*dw1s2(i);
  228. w2s2(i+1)=w2s2(i)-lr*dw2s2(i);
  229. w3s1(i+1)=w3s1(i)-lr*dw3s1(i);
  230. w4s1(i+1)=w4s1(i)-lr*dw4s1(i);
  231.  
  232. % czyli zmieniamy 10 wartosci wag w jednym kroku obliczeniowym
  233. % tu jest zakonczenie (end) petli dla kolejnych epok
  234.  
  235. end % to jest zakonczenie dla epoki, tu mamy 100 epok bo n=100
  236. % tu jest koniec obliczen
  237. % koniec algorytmu uczenia sieci
  238.  
  239. % Mozna przystapic do pokazania rezultatow obliczenia w procesie uczenia
  240. % bedzie jeden rysunek zawierajacy 4 podrysunki
  241. % na kazdym podrysunku bedzie pewna liczba wykresow
  242. % zapis (221) oznacza ze bedzie 4 rysunki w dwoch wierszach i dwoch kolumnach
  243. % i ze to bedzie 1 rysunek dotyczacy wielkosci beta, to pochodna bledu na wyjsciu z sieci
  244. % a beta21 i beta22 to pochodne bledow wewnatrz struktury sieci
  245. % pomiedzy pierwsza a druga warstwa
  246.  
  247. subplot(221), plot(beta); title('beta beta21 beta22'); hold on;
  248. subplot(221), plot(beta22); hold on;
  249. subplot(221), plot(beta21); hold on;
  250.  
  251. % na rysunku drugim zmiany wag od dw111 do dw122
  252.  
  253. subplot(222), plot(dw111); title('od dw111 do dw122 do w22'); hold on;
  254. subplot(222), plot(dw112); hold on;
  255. subplot(222), plot(dw121); hold on;
  256. subplot(222), plot(dw122); hold on;
  257. subplot(222), plot(dw21); hold on;
  258. subplot(222), plot(dw22); hold on;
  259. subplot(222), plot(dw1s2); hold on;
  260. subplot(222), plot(dw2s2); hold on;
  261. subplot(222), plot(dw3s1); hold on;
  262. subplot(222), plot(dw4s1); hold on;
  263.  
  264. % na trzecim rysunku beda wyrysowane wartosci wag (10 wag)
  265.  
  266. subplot(223), plot(w111); title('od w111 do w22'); hold on;
  267. subplot(223), plot(w112); hold on;
  268. subplot(223), plot(w121); hold on;
  269. subplot(223), plot(w122); hold on;
  270. subplot(223), plot(w21); hold on;
  271. subplot(223), plot(w22); hold on;
  272. subplot(223), plot(w1s2); hold on;
  273. subplot(223), plot(w2s2); hold on;
  274. subplot(223), plot(w3s1); hold on;
  275. subplot(223), plot(w4s1); hold on;
  276.  
  277. % na rysunku 4 bedzie wyrysowany blad
  278.  
  279. subplot(224), plot(blad);
  280. title('blad czyli error na wyjsciu sieci');
  281.  
  282. pause;
  283.  
  284. % t oznacza test
  285.  
  286. wt111=w111(n+1) % wartosci wagi w kroku 101 bo n=100, 100 epok
  287.  
  288. wt112=w112(n+1)
  289. wt121=w121(n+1)
  290. wt122=w122(n+1)
  291.  
  292. wt1s2=w1s2(n+1)
  293. wt2s2=w2s2(n+1)
  294. wt3s1=w3s1(n+1)
  295. wt4s1=w4s1(n+1)
  296.  
  297. wt21=w21(n+1)
  298. wt22=w22(n+1)
  299.  
  300. % trzeba podac wektor danych do testu
  301. % tak jak w procesie uczenia bedzie ich 43/7
  302.  
  303. ut1=[1:4];
  304. ut2=[1:4];
  305. ut3=[1:4];
  306. ut4=[1:4];
  307.  
  308. % wprowadzimy wrtosci z bazy danych dla wektorow ut, t oznacza tekstu
  309. % z uwagi na zastosowanie sigmoidy jako funkcji przejscia dokonamy ich skalowania
  310. % musimy skalowac bo sigmoida jest ograniczona do wartosci z przedzialu 0 1
  311.  
  312. ut1(1)=265.5/270.0; %sygnaly wejsc INTER CARS S.A.
  313. ut1(2)=268.5/270.0;
  314. ut1(3)=268.0/270.0;
  315. ut1(4)=1;
  316.  
  317. ut2(1)=1; % wektor wejsc spolki gieldowej GRUPA ŻYWIEC S.A.
  318. ut2(2)=1;
  319. ut2(3)=1;
  320. ut2(4)=1;
  321.  
  322. ut3(1)=103.6/109.8; %sygnaly wejsc GRUPA CD PROJEKT S.A.
  323. ut3(2)=1;
  324. ut3(3)=108.2/109.8;
  325. ut3(4)=108.2/109.8;
  326.  
  327. u4(1)=118.0/118.5; %sygnaly wejsc DĘBICA S.A.
  328. u4(2)=117.5/118.5;
  329. u4(3)=118.0;
  330. u4(4)=1;
  331.  
  332.  
  333. % liczymy pierwsza sume
  334. % 111111111111111111111
  335.  
  336. zt11=ut1(1)*wt111+ut2(1)*wt112+ut3(1)*wt3s1+ut4(1)*wt4s1;
  337. st11=(1/(1+exp(-zt11)));
  338. zt12=ut3(1)*wt121+ut4(1)*wt122+ut1(1)*wt1s2+ut2(1)*wt2s2;
  339. st12=(1/(1+exp(-zt12)));
  340.  
  341. zt21=st11*wt21+st12*wt22;
  342. st21=(1/(1+exp(-zt21)));
  343.  
  344. % to jest sygnal na wyjsciu sieci, zatem mozemy obliczyc blad
  345.  
  346. % dla drugiego wektora
  347. % 22222222222222222222
  348.  
  349. zt11=ut1(2)*wt111+ut2(2)*wt112+ut3(2)*wt3s1+ut4(2)*wt4s1;
  350. st11=(1/(1+exp(-zt11)));
  351.  
  352. zt12=ut3(2)*wt121+ut4(2)*wt122+ut1(2)*wt1s2+ut2(2)*wt2s2;
  353. st12=(1/(1+exp(-zt12)));
  354.  
  355. zt21=st11*wt21+st12*wt22;
  356. st21=(1/(1+exp(-zt21)));
  357.  
  358. % dla trzeciego wketora
  359. % 333333333333333333333
  360.  
  361. zt11=ut1(3)*wt111+ut2(3)*wt112+ut3(3)*wt3s1+ut4(3)*wt4s1;
  362. st11=(1/(1+exp(-zt11)));
  363.  
  364. zt12=ut3(3)*wt121+ut4(3)*wt122+ut1(3)*wt1s2+ut2(3)*wt2s2;
  365. st12=(1/(1+exp(-zt12)));
  366.  
  367. zt21=st11*wt21+st12*wt22;
  368. st21=(1/(1+exp(-zt21)));
  369.  
  370. % dla 4 wektora danych testowych
  371. % 444444444444444444444444444444
  372. % w tym przypadku interesuje nas tylko wynik dla 4 wektora danych
  373. % testowych, czyli st21 ktorego wartosc obliczamy ponizej
  374.  
  375. zt11=ut1(4)*wt111+ut2(4)*wt112+ut3(4)*wt3s1+ut4(4)*wt4s1;
  376. st11=(1/(1+exp(-zt11)));
  377.  
  378. zt12=ut3(4)*wt121+ut4(4)*wt122+ut1(4)*wt1s2+ut2(4)*wt2s2;
  379. st12=(1/(1+exp(-zt12)));
  380.  
  381. zt21=st11*wt21+st12*wt22;
  382. st21=(1/(1+exp(-zt21)));
  383. st21=st21*261.0 %odpowiedz sieci przeskalowana do normalnego przedzialu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement