Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear all
- close all
- clc
- in=[1 1 1;
- 1 0 1;
- 0 1 1;
- 0 0 1];
- out=[1;
- 0;
- 0;
- 0];
- lr=1;
- max_epochs=10000;
- max_error=0.001;
- n_in=size(in,2); %liczba wejść neuronu = 3
- wagi=2*rand(n_in,1)-1; %wagi początkowe, przedzial (-1,1)
- epochs=1; % pierwsza epoka
- error=1; % wartość początkowa błędu
- err=error; % zmienna przydatna do rysowania wykresu błedu
- while error>max_error && epochs<max_epochs
- y=sigmoid(in*wagi); %obliczanie aktualnego wektora wyjsciowego
- blad=out-y; % różnica między wartościami wzorcowymi a aktualnymi
- poprawka=blad.*sigmoid_der(y);
- wagi=wagi+lr*in'*poprawka; % korekta wektora wag
- error=sum(blad.^2)/length(blad); % obliczanie błędu średniokwadratowego MSE
- epochs=epochs+1; % kolejna epoka
- err(epochs)=error; % tworzenie wektora błedów w kolejnych epokach do wykresu bledu
- disp('epoka:')
- disp(epochs)
- disp('błąd:')
- disp(error)
- end
- figure
- subplot(2,1,1) %wybór wykresu -> help subplot
- semilogy(1:epochs,err) %wykres ze skalą logarytmiczną na osi y
- grid on % dodanie siatki
- xlabel('epoka')
- ylabel('błąd')
- subplot(2,1,2) % wybór wykresu
- %tworzenie wykresu płasczyzny x1 i x2 z podziałem na wartosci 0 i 1
- [X1,X2]=meshgrid(-0.1:0.1:1.1); %tworzenie siatki punktów x1 i x2 w zadanym przedziale
- YY=X1*wagi(1)+X2*wagi(2)+1*wagi(3); % obliczenie wyniku f.logicznej
- YY=sign(YY); %YY=1 gdy YY>0 oraz YY=-1 gdy YY<0
- contourf(X1,X2,YY,1) % wykres konturowy z wypełnieniem
- hold on % dzięki temu kolejny wykres nie usunie poprzedniego
- plot(in(:,1),in(:,2),'ro') % rysowanie punktów in kolorem czerwonym
- xlabel('x_1')
- ylabel('x_2')
- % ograniczenie osi wykresu
- xlim([-0.1,1.1])
- ylim([-0.1,1.1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement