SHARE
TWEET

UKRAINA

pabloducato Jun 23rd, 2018 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top