Advertisement
pabloducato

UKRAINA

Jun 23rd, 2018
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.62 KB | None | 0 0
  1. clear all; % Wyczyszczenie informacji o wszystkich zmiennych w programie
  2. nntwarn off;% Wyłączenie komunikatów informujących o używaniu przestarzałych funkcji
  3. format compact;%Likwiduję dodatkowe puste linie w odpowiedzi programu
  4. file = dlmread ('data2.txt');
  5. P = file(:, 1:34)';
  6. T = file(:, 35)';
  7.  
  8. [R,Q] = size(P);%Okreslamy liczby neuronow w warstwie wejsciowej, [R,Q]=5x151
  9.  
  10. for S1 = 1: 3 : 25,%Liczba neuronów w warstwie pierwszej
  11. for S2 = 1: 3 : S1,%Liczba neuronów w warstwie drugiej
  12.         [S3,Q] = size(T);%Określenie liczby neuronów w warstwie wyjściowej [S3,Q]=1x151
  13.  
  14. lr=1e-3;%Współczynnik uczenia
  15.  
  16. [W1,B1] = nwtan(S1,R);%Losowa inicjacja wag do warstwy pierwszej
  17. [W2,B2] = nwtan(S2,S1);
  18. [W3,B3] = rands(S3,S2);
  19.  
  20. disp_freq = 1000;  %Częstotliwość wyświetlania wyników
  21. err_goal=.25;%Błąd oczekiwany
  22. error = [];%Macierz błedu
  23.  
  24. %Maksymalna ilość epok (kroków uczenia)
  25. for max_epoch =[20000, 40000, 60000, 80000, 100000],
  26. for epoch=1:max_epoch,
  27.  
  28. A1 = tansig(W1*P,B1);%Wartości na wyjściu warstwy A1
  29. A2 = tansig(W2*A1,B2);%Wartości na wyjściu warstwy A2
  30. A3 = purelin(W3*A2,B3);%Wartości na wyjściu warstwy A
  31. E = T -A3;%Obliczanie błedu
  32.  
  33. D3 = deltalin(A3,E);%Obliczamy deltę dla warstwy trzeciej
  34. D2 = deltatan(A2,D3,W3);%Obliczamy deltę dla warstwy drugiej
  35. D1 = deltatan(A1,D2,W2); %Obliczamy deltę dla warstwy pierwszej
  36.  
  37. [dW1,dB1] = learnbp(P,D1,lr);%Obliczanie zmian wag
  38. W1 = W1 + dW1;%Aktualizacja wag wektora wejściowego
  39. B1 = B1 + dB1;%Aktualizacja wag przesunięć
  40.  
  41. [dW2,dB2] = learnbp(A1,D2,lr);
  42. W2 = W2 + dW2;
  43. B2 = B2 + dB2;
  44.        
  45. [dW3,dB3] = learnbp(A2,D3,lr);
  46. W3 = W3 + dW3;
  47. B3 = B3 + dB3;
  48.  
  49. SSE = sumsqr(E);%Suma kwadratów błędów
  50.            
  51. if SSE > 10E20,%Zakończenie uczenia w wypadku dużej wartości SSE(NaN)
  52. break,
  53. end,
  54.  
  55. error = [error SSE];%Dołączenie "SSE" do tablicy "error"
  56.  
  57.  
  58. if SSE < err_goal,%Zakończenie uczenia w wypadku osiągnięcia
  59. epoch = epoch - 1;
  60. break,
  61. end,
  62.  
  63. if(rem(epoch,disp_freq)==0)%Wyświetlanie wyników
  64. epoch %Wypisujemy na ekran ilości epok
  65. SSE %Wypisujemy na ekran SSE
  66. S1 %Wypisujemy na ekran ilość neuronów w warstwie pierwszej
  67. S2 %Wypisujemy na ekran ilość neuronów w warstwie drugiej
  68. lr %Wypisujemy na ekran współczynnik uczenia
  69. end
  70. end
  71.  
  72. nauczanie = 100*(1-sum((abs(T-A3)>=.5)')/length(T))
  73.  
  74. %Zapisanie parametrów oraz wyników do pliku .txt
  75. wyniki  = [S1 S2 lr epoch 100*(1-sum((abs(T-A3)>=.5)')/length(T)) SSE]
  76.  
  77. fid = fopen('wynnikilr3_next.txt','a+');%Odtworzenia pliku
  78.  
  79. for i=1:size(wyniki,1)
  80. fprintf(fid, '%g\t' ,wyniki(i,:));
  81. end
  82.  
  83. fprintf(fid,'\r\n');
  84. fclose(fid);%Tu zamykanie pliku
  85. end
  86. end
  87. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement