pabloducato

learnbp

Jun 16th, 2018
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.66 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;%Zlikwidowanie dodatkowych pustych linii w odpowiedzi programu
  4. file = dlmread ('data2.txt'); %Wczytanie danych wejsciowych z pliku
  5. P = file(:, 1:34)';%Liczba atrybutow zbioru danych wejsciowego
  6. T = file(:, 35)';%Nr atrybutu klasyfikujacy zbior Jonosfery
  7. [R,Q] = size(P);%Okreslenie liczby neuronow w warstwie wejsciowej, [R,Q]=34x351
  8.     for S1 = 1: 3 : 25,%Liczba neuronów w warstwie pierwszej
  9.         for S2 = 1: 3 : S1,%Liczba neuronów w warstwie drugiej
  10.         [S3,Q] = size(T);%Określenie liczby neuronów w warstwie wyjściowej [S3,Q]=1x351
  11.         lr=1e-6;%Współczynnik uczenia le-3; le-4; le-5; le-6
  12.         [W1,B1] = nwtan(S1,R);%Losowa inicjacja wag do warstwy pierwszej
  13.         [W2,B2] = nwtan(S2,S1);
  14.         [W3,B3] = rands(S3,S2);
  15.         disp_freq = 1000;  %Częstotliwość wyświetlania wyników
  16.         %err_goal wynosi 0.25 poniewaz (0.5)^2 to liczba wystapien w ciagu uczacym
  17.         %wartosc 0.5 = polowa najmniejszej odleglosci pomiedzy reprezentantami klas
  18.         err_goal=0.25;%Błąd oczekiwany
  19.         error = [];%Macierz błedu
  20.         %Maksymalna ilość epok (ilosc kroków uczenia)
  21.             for max_epoch =[20000, 40000, 60000, 80000, 100000],
  22.                 for epoch=1:max_epoch,%Ograniczenie zakresu epoch od 1 do max_epoch
  23.                 A1 = tansig(W1*P,B1);%Wartości na wyjściu warstwy A1
  24.                 A2 = tansig(W2*A1,B2);%Wartości na wyjściu warstwy A2
  25.                 A3 = purelin(W3*A2,B3);%Wartości na wyjściu warstwy A3
  26.                 E = T -A3;%Obliczanie błedu
  27.                 D3 = deltalin(A3,E);%Obliczanie delty dla warstwy trzeciej
  28.                 D2 = deltatan(A2,D3,W3);%Obliczanie delty dla warstwy drugiej
  29.                 D1 = deltatan(A1,D2,W2); %Obliczanie delty dla warstwy pierwszej
  30.                 [dW1,dB1] = learnbp(P,D1,lr);%Obliczanie zmian wag
  31.                 W1 = W1 + dW1;%Aktualizacja wag wektora wejsciowego
  32.                 B1 = B1 + dB1;%Aktualizacja wag przesuniec
  33.                 [dW2,dB2] = learnbp(A1,D2,lr);
  34.                 W2 = W2 + dW2;
  35.                 B2 = B2 + dB2; 
  36.                 [dW3,dB3] = learnbp(A2,D3,lr);
  37.                 W3 = W3 + dW3;
  38.                 B3 = B3 + dB3;
  39.                 SSE = sumsqr(E);%Suma kwadratow bledow     
  40.                 if SSE > 10E20,%Zakończenie uczenia w wypadku dużej wartości SSE(NaN)
  41.                 break,
  42.                 end,
  43.                 error = [error SSE];%Dołączenie "SSE" do tablicy "error"
  44.                 if SSE < err_goal,%Zakończenie uczenia w wypadku osiagniecia SSE < err_goal
  45.                 epoch = epoch - 1;
  46.                 break,
  47.                 end,
  48.                 if(rem(epoch,disp_freq)==0)%Wyswietlanie wynikow
  49.                 epoch %Wypisujemy na ekran ilości epok
  50.                 SSE %Wypisujemy na ekran SSE
  51.                 S1 %Wypisanie na ekran ilosc neuronow w warstwie pierwszej
  52.                 S2 %Wypisanie na ekran ilosc neuronów w warstwie drugiej
  53.                 lr %Wypisanie na ekran wartosci wspolczynnika uczenia
  54.                 end
  55.             end
  56.         nauczanie = 100*(1-sum((abs(T-A3)>=.5)')/length(T))
  57.         %Zapisanie parametrow oraz wyników do pliku *.txt
  58.         wyniki  = [S1 S2 lr epoch 100*(1-sum((abs(T-A3)>=.5)')/length(T)) SSE]
  59.         fid = fopen('wynnikilr6.txt','a+');%Otworzenie pliku *.txt, flaga 'a+'
  60.             for i=1:size(wyniki,1)
  61.             fprintf(fid, '%g\t' ,wyniki(i,:));
  62.             end
  63.         fprintf(fid,'\r\n');
  64.         fclose(fid);%Zamkniecie pliku *.txt
  65.         end
  66.     end
  67. end
Add Comment
Please, Sign In to add comment