Advertisement
blackpab

mat2

Apr 18th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.70 KB | None | 0 0
  1. lr=2.0; %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)=23.90/25.05;
  313. ut1(2)=24.80/25.05;
  314. ut1(3)=24.97/25.05;
  315. ut1(4)=25.00/25.05;
  316.  
  317. ut2(1)=115.50/118.90;
  318. ut2(2)=118.00/118.90;
  319. ut2(3)=118.90/118.90;
  320. ut2(4)=116.50/118.90;
  321.  
  322. ut3(1)=296.50/310.80;
  323. ut3(2)=304.90/310.80;
  324. ut3(3)=310.80/310.80;
  325. ut3(4)=307.45/310.80;
  326.  
  327. ut4(1)=57.23/59.82;
  328. ut4(2)=59.16/59.82;
  329. ut4(3)=59.82/59.82;
  330. ut4(4)=58.50/59.82;
  331.  
  332. ut1(1)=265.5/270.0; %sygnaly wejsc INTER CARS S.A.
  333. ut1(2)=268.5/270.0;
  334. ut1(3)=268.0/270.0;
  335. ut1(4)=1;
  336.  
  337. ut2(1)=1; % wektor wejsc spolki gieldowej GRUPA ŻYWIEC S.A.
  338. ut2(2)=1;
  339. ut2(3)=1;
  340. ut2(4)=1;
  341.  
  342. ut3(1)=103.6/109.8; %sygnaly wejsc GRUPA CD PROJEKT S.A.
  343. ut3(2)=1;
  344. ut3(3)=108.2/109.8;
  345. ut3(4)=108.2/109.8;
  346.  
  347. u4(1)=118.0/118.5; %sygnaly wejsc DĘBICA S.A.
  348. u4(2)=117.5/118.5;
  349. u4(3)=118.0;
  350. u4(4)=1;
  351.  
  352.  
  353. % liczymy pierwsza sume
  354. % 111111111111111111111
  355.  
  356. zt11=ut1(1)*wt111+ut2(1)*wt112+ut3(1)*wt3s1+ut4(1)*wt4s1;
  357. st11=(1/(1+exp(-zt11)));
  358. zt12=ut3(1)*wt121+ut4(1)*wt122+ut1(1)*wt1s2+ut2(1)*wt2s2;
  359. st12=(1/(1+exp(-zt12)));
  360.  
  361. zt21=st11*wt21+st12*wt22;
  362. st21=(1/(1+exp(-zt21)));
  363.  
  364. % to jest sygnal na wyjsciu sieci, zatem mozemy obliczyc blad
  365.  
  366. % dla drugiego wektora
  367. % 22222222222222222222
  368.  
  369. zt11=ut1(2)*wt111+ut2(2)*wt112+ut3(2)*wt3s1+ut4(2)*wt4s1;
  370. st11=(1/(1+exp(-zt11)));
  371.  
  372. zt12=ut3(2)*wt121+ut4(2)*wt122+ut1(2)*wt1s2+ut2(2)*wt2s2;
  373. st12=(1/(1+exp(-zt12)));
  374.  
  375. zt21=st11*wt21+st12*wt22;
  376. st21=(1/(1+exp(-zt21)));
  377.  
  378. % dla trzeciego wketora
  379. % 333333333333333333333
  380.  
  381. zt11=ut1(3)*wt111+ut2(3)*wt112+ut3(3)*wt3s1+ut4(3)*wt4s1;
  382. st11=(1/(1+exp(-zt11)));
  383.  
  384. zt12=ut3(3)*wt121+ut4(3)*wt122+ut1(3)*wt1s2+ut2(3)*wt2s2;
  385. st12=(1/(1+exp(-zt12)));
  386.  
  387. zt21=st11*wt21+st12*wt22;
  388. st21=(1/(1+exp(-zt21)));
  389.  
  390. % dla 4 wektora danych testowych
  391. % 444444444444444444444444444444
  392. % w tym przypadku interesuje nas tylko wynik dla 4 wektora danych
  393. % testowych, czyli st21 ktorego wartosc obliczamy ponizej
  394.  
  395. zt11=ut1(4)*wt111+ut2(4)*wt112+ut3(4)*wt3s1+ut4(4)*wt4s1;
  396. st11=(1/(1+exp(-zt11)));
  397.  
  398. zt12=ut3(4)*wt121+ut4(4)*wt122+ut1(4)*wt1s2+ut2(4)*wt2s2;
  399. st12=(1/(1+exp(-zt12)));
  400.  
  401. zt21=st11*wt21+st12*wt22;
  402. st21=(1/(1+exp(-zt21)));
  403. st21=st21*25.05 %odpowiedz sieci przeskalowana do normalnego przedzialu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement