Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear all; % Wyczyszczenie informacji o wszystkich zmiennych w programie
- nntwarn off;% Wyłączenie komunikatów informujących o używaniu przestarzałych funkcji
- format compact;%Zlikwidowanie dodatkowych pustych linii w odpowiedzi programu
- file = dlmread ('data2.txt'); %Wczytanie danych wejsciowych z pliku
- P = file(:, 1:34)';%Liczba atrybutow zbioru danych wejsciowego
- T = file(:, 35)';%Nr atrybutu klasyfikujacy zbior Jonosfery
- [R,Q] = size(P);%Okreslenie liczby neuronow w warstwie wejsciowej, [R,Q]=34x351
- for S1 = 1: 3 : 25,%Liczba neuronów w warstwie pierwszej
- for S2 = 1: 3 : S1,%Liczba neuronów w warstwie drugiej
- [S3,Q] = size(T);%Określenie liczby neuronów w warstwie wyjściowej [S3,Q]=1x351
- lr=1e-6;%Współczynnik uczenia le-3; le-4; le-5; le-6
- [W1,B1] = nwtan(S1,R);%Losowa inicjacja wag do warstwy pierwszej
- [W2,B2] = nwtan(S2,S1);
- [W3,B3] = rands(S3,S2);
- disp_freq = 1000; %Częstotliwość wyświetlania wyników
- %err_goal wynosi 0.25 poniewaz (0.5)^2 to liczba wystapien w ciagu uczacym
- %wartosc 0.5 = polowa najmniejszej odleglosci pomiedzy reprezentantami klas
- err_goal=0.25;%Błąd oczekiwany
- error = [];%Macierz błedu
- %Maksymalna ilość epok (ilosc kroków uczenia)
- for max_epoch =[20000, 40000, 60000, 80000, 100000],
- for epoch=1:max_epoch,%Ograniczenie zakresu epoch od 1 do max_epoch
- A1 = tansig(W1*P,B1);%Wartości na wyjściu warstwy A1
- A2 = tansig(W2*A1,B2);%Wartości na wyjściu warstwy A2
- A3 = purelin(W3*A2,B3);%Wartości na wyjściu warstwy A3
- E = T -A3;%Obliczanie błedu
- D3 = deltalin(A3,E);%Obliczanie delty dla warstwy trzeciej
- D2 = deltatan(A2,D3,W3);%Obliczanie delty dla warstwy drugiej
- D1 = deltatan(A1,D2,W2); %Obliczanie delty dla warstwy pierwszej
- [dW1,dB1] = learnbp(P,D1,lr);%Obliczanie zmian wag
- W1 = W1 + dW1;%Aktualizacja wag wektora wejsciowego
- B1 = B1 + dB1;%Aktualizacja wag przesuniec
- [dW2,dB2] = learnbp(A1,D2,lr);
- W2 = W2 + dW2;
- B2 = B2 + dB2;
- [dW3,dB3] = learnbp(A2,D3,lr);
- W3 = W3 + dW3;
- B3 = B3 + dB3;
- SSE = sumsqr(E);%Suma kwadratow bledow
- if SSE > 10E20,%Zakończenie uczenia w wypadku dużej wartości SSE(NaN)
- break,
- end,
- error = [error SSE];%Dołączenie "SSE" do tablicy "error"
- if SSE < err_goal,%Zakończenie uczenia w wypadku osiagniecia SSE < err_goal
- epoch = epoch - 1;
- break,
- end,
- if(rem(epoch,disp_freq)==0)%Wyswietlanie wynikow
- epoch %Wypisujemy na ekran ilości epok
- SSE %Wypisujemy na ekran SSE
- S1 %Wypisanie na ekran ilosc neuronow w warstwie pierwszej
- S2 %Wypisanie na ekran ilosc neuronów w warstwie drugiej
- lr %Wypisanie na ekran wartosci wspolczynnika uczenia
- end
- end
- nauczanie = 100*(1-sum((abs(T-A3)>=.5)')/length(T))
- %Zapisanie parametrow oraz wyników do pliku *.txt
- wyniki = [S1 S2 lr epoch 100*(1-sum((abs(T-A3)>=.5)')/length(T)) SSE]
- fid = fopen('wynnikilr6.txt','a+');%Otworzenie pliku *.txt, flaga 'a+'
- for i=1:size(wyniki,1)
- fprintf(fid, '%g\t' ,wyniki(i,:));
- end
- fprintf(fid,'\r\n');
- fclose(fid);%Zamkniecie pliku *.txt
- end
- end
- end
Add Comment
Please, Sign In to add comment