Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. clear all
  2. close all
  3. clc
  4.  
  5.  
  6. % macierz wejściowa
  7. % x1 x2 stała
  8. in=[0 0 1;
  9. 0 1 1;
  10. 1 0 1;
  11. 1 1 1];
  12.  
  13. for i=1:1:5
  14. %wektor wyjściowy
  15. AND = [0; 0; 0; 1];
  16. OR = [0; 1; 1; 1];
  17. NAND = [1; 1; 1; 0];
  18. NOR = [1; 0; 0; 0];
  19. XOR = [0; 1; 1; 0];
  20.  
  21. out(i) =[AND OR NAND NOR XOR]; %co do chuja
  22.  
  23. lr=1; %prędkość uczenia
  24. max_epochs=10000; %maksymalna liczba epok
  25. max_error=0.001; %maksymalny błąd
  26.  
  27. n_in=size(in,2); %liczba wejść neuronu = 3
  28. wagi=2*rand(n_in,1)-1; %wagi początkowe, przedzial (-1,1)
  29. epochs=1; % pierwsza epoka
  30. error=1; % wartość początkowa błędu
  31. err=error; % zmienna przydatna do rysowania wykresu błedu
  32.  
  33. while error>max_error && epochs<max_epochs
  34.  
  35. y=sigmoid(in*wagi); %obliczanie aktualnego wektora wyjsciowego
  36. blad=out-y; % różnica między wartościami wzorcowymi a aktualnymi
  37. poprawka=blad.*sigmoid_der(y);
  38. wagi=wagi+lr*in'*poprawka; % korekta wektora wag
  39. error=sum(blad.^2)/length(blad); % obliczanie błędu średniokwadratowego MSE
  40. epochs=epochs+1; % kolejna epoka
  41. err(epochs)=error; % tworzenie wektora błedów w kolejnych epokach do wykresu bledu
  42. disp('epoka:')
  43. disp(epochs)
  44. disp('błąd:')
  45. disp(error)
  46.  
  47. end
  48.  
  49. Y=sigmoid(in*wagi);
  50.  
  51. disp('Aproksymowacja funcji logicznej pojedynczym perceptronem:')
  52. disp('-macierz wejść:')
  53. disp(in(:,1:2)) % tylko x1 i x2
  54. disp('-współczynniki wagowe:')
  55. disp(wagi)
  56. disp('-wynik aproksymowany sztucznym neuronem')
  57. disp(Y)
  58. disp('-wynik dokładny')
  59. disp(out)
  60.  
  61. figure(i)
  62. subplot(2,1,1) %wybór wykresu -> help subplot
  63. semilogy(1:epochs,err) %wykres ze skalą logarytmiczną na osi y
  64. grid on % dodanie siatki
  65. xlabel('epoka')
  66. ylabel('błąd')
  67.  
  68. subplot(2,1,2) % wybór wykresu
  69. %tworzenie wykresu płasczyzny x1 i x2 z podziałem na wartosci 0 i 1
  70. [X1,X2]=meshgrid(-0.1:0.1:1.1); %tworzenie siatki punktów x1 i x2 w zadanym przedziale
  71. YY=X1*wagi(1)+X2*wagi(2)+1*wagi(3); % obliczenie wyniku f.logicznej
  72. YY=sign(YY); %YY=1 gdy YY>0 oraz YY=-1 gdy YY<0
  73. contourf(X1,X2,YY,1) % wykres konturowy z wypełnieniem
  74. hold on % dzięki temu kolejny wykres nie usunie poprzedniego
  75. plot(in(:,1),in(:,2),'ro') % rysowanie punktów wejściowych kolorem czerwonym
  76. xlabel('x_1')
  77. ylabel('x_2')
  78. % ograniczenie osi wykresu
  79. xlim([-0.1,1.1])
  80. ylim([-0.1,1.1])
  81.  
  82. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement