1
Przebieg ćwiczenia 1. Podstawy obsługi pakietu MATLAB
MATLAB jest interakcyjnym środowiskiem do wykonywania odliczeń naukowych i inżynierskich. Umożliwia
testowanie algorytmów, modelowanie i symulację, analizę i wizualizację danych, sygnałów oraz wyników obliczeń.
Zasadnicze jego zalety to możliwość szybkiego uzyskania rezultatów skomplikowanych obliczeń i przedstawienie ich w
postaci wykresów dwu- lub trójwymiarowych, a także w postaci map wielobarwnych.
MATLAB jest językiem programowania wysokiego poziomu. Podstawowymi typami danych w MATLAB-ie są
tablice o elementach rzeczywistych lub zespolonych oraz struktury i obiekty. Zmienne przechowywane są w przestrzeni
roboczej (ang. workspace) i są dostępne przez nazwę. W MATLAB-ie nie stosuje się deklaracji zmiennych. Zmienne
wybranego typu określa (definiuje) użytkownik. MATLAB automatycznie rozpoznaje typ zmiennej. Rezultaty
wykonywanych operacji matematycznych lub funkcji zależą od rozpoznanego typu.
1. Wykonywanie obliczeń
Wynik obliczeń wartości wyrażenia jest dostępny jako wartość zmiennej, której to wyrażenie przypisano. Dla
polecenia w postaci:
>> zmienna = wyrażenie
po naciśnięciu klawisza ENTER, zostanie obliczona wartość wyrażenia i przypisana zmiennej. Zmienna zostanie
wprowadzona do przestrzeni roboczej (ang. workspace) – jeśli zmienna już istniała, to przyjmie nową wartość. Na
ekranie pojawi się odpowiedź w postaci:
zmienna = wartość wyrażenia
Możliwe jest także wykonywanie polecenia w postaci:
>> wyrażenie
W tym przypadku wynik obliczeń będzie przypisany standardowej zmiennej ans. Odpowiedź na takie polecenie jest
następująca:
ans = wartość wyrażenia
Dodanie średnika po wyrażeniu powoduje, że wartość wyrażenia nie jest wypisywana na ekranie.
W jednej linii można wpisać wiele poleceń, jeśli oddzieli się je średnikiem.
Wykonać następujące polecenia:
>> 1+3
>> 1e4
>> 1e4 + 2e4
>> log(2)
>> log(2.7183)
>> exp(1)
>> log(exp(1))
>> log10(2.7183)
>> log10(10)
>> pi
>> sin(pi/2)
>> 2^3
>> sin(0.4)^2+cos(0.4)^2
>> a = 12.5
>> a
>> a=5
>> a
>> b=5+4
>> c=a+b
>> z1=1+2i
>> z2=10j
>> real(z1)
>> imag(z1)
>> sqrt(-1)
>> i^2
>> sqrt(-4)
>> 1/0
2. Przydatne polecenia
who – lista zmiennych obecnych w przestrzeni roboczej programu
whos – lista zmiennych obecnych w przestrzeni roboczej programu wraz z formatem
clear – usuwa zmienne z przestrzeni roboczej
clear nazwa_zmiennej – usuwa zmienną z przestrzeni roboczej
3. Niektóre typy danych
W MATLAB-ie podstawowym typem danych jest tablica. Jej elementami mogą być liczby rzeczywiste lub
zespolone, znaki albo inne tablice. Macierz jest szczególnym przypadkiem tablicy. Jest to tablica dwuwymiarowa, na
której elementach wykonuje się operacje algebry liniowej.
Filozofię działania MATLAB-a oparto na operacjach wektorowo macierzowych. Pojedyncza wartość liczbowa jest
traktowana jako macierz o wymiarach (1x1). Wektor jest to macierz, która składa się z jednego wiersza lub jednej
kolumny.
2
Nie stosuje się deklarowania zmiennych, Tworzenie zmiennych wybranego typu wykonuje się poprzez instrukcje
przypisywania lub użycie odpowiedniej funkcji. Zestaw funkcji stosowanych do tworzenia i przekształcania typów
danych uzyskuje się poleceniem help datatypes.
• macierze – tablice dwuwymiarowe prostokątne o elementach rzeczywistych lub zespolonych. Elementy macierzy
zapisuje się w nawiasach kwadratowych, kolumny oddziela się spacją lub przecinkiem, a wiersze średnikiem.
Wykonać następujące polecenia:
>> A = [1 2 3; 4 5 6; 7 8 9]
4. Dwukropek – operator generowania wektorów i tablic
Dwukropek (:) jest jednym z częściej używanych operatorów w MATLAB-ie. Jest on wykorzystywany przy
tworzeniu wektorów o równomiernie rozłożonych elementach. Umożliwia łatwe wyselekcjonowanie żądanych wierszy,
kolumn lub elementów tablic.
•
Generowanie wektorów
Generowanie wektorów, z zastosowaniem notacji dwukropkowej, przebiega według następujących zasad:
-
j:k – taki zapis definiuje wektor [j, j+1, j+2, ..., k],
-
j:d:k – taki zapis określa wektor [j, j+d, j+2d, ..., k].
Wykonać następujące polecenia:
>> w1 = 1:6
>> w2 = 1:0.1:2
>> w11 = 1:6.5
>> w22 = 10:10:55
>> A = [1:5; 6:10; 11:15; 16:20; 21:25]
>> b = [0:0.1:0.5]
>> B = [b; b+1; b+2; b+3; b+4; b+5; b+6]
•
Wybór żądanych wierszy, kolumn i elementów tablicy
Wyboru żądanych wierszy, kolumn i elementów tablicy dokonuje się za pomocą podanych poniżej zapisów:
-
A(i, j) – wypisanie elementu z i-tego wiersza i j-tej kolumny,
-
A(:, j) – wypisanie j-tej kolumny macierzy A,
-
A(i, :) – wypisanie i-tego wiersza macierzy A,
-
A(k) – wypisanie k-tego elementu macierzy A,
-
A(:) – wypisanie wszystkich elementów macierzy A w jednej kolumnie,
Wykonać następujące polecenia:
>> A
>> A(1,1)
>> A(1,2)
>> A(:, 1)
>> A(:, 3)
>> A(:, end)
>> A(1, :)
>> A(3, :)
>> A(end, :)
>> A
>> A(1)
>> A(2)
>> A(6)
>> A(7)
>> A(1:10)
>> A(1:end)
>> A(:)
>> A
5. Operatory arytmetyczne i operacje na macierzach
W MATLAB-ie wykonuje się za pomocą operatorów dwa rodzaje operacji na macierzach. Pierwszy rodzaj to
arytmetyczne operacje macierzowe określone regułami algebry liniowej (np. X*Y). Drugi rodzaj to tzw. arytmetyczne
operacje tablicowe, które są wykonywane na elementach macierzy (np. X .* Y – realizuje mnożenie elementów
wektorów lub macierzy o tych samych indeksach – X(i,j)*Y(i,j)). Operatory arytmetyczne zestawiono w poniższej
tabeli. Informacje, dotyczące sposobu działania operatorów, można uzyskach wykonując polecenia: help arith, help
slash, help ctranspose, help kron.
3
Symbol operacji
macierzowej
Nazwa operacji
Symbol operacji
tablicowej
+
–
*
^
/
\
’
.’
kon
dodawanie
odejmowanie
mnożenie
potęgowanie
dzielenie prawostronne
dzielenie lewostronne
sprzężenie macierzy
transpozycja macierzy
iloczyn tensorowy Kroneckera
+
–
.*
.^
./
.\
Wykonać następujące polecenia:
>> A = [1 2 3; 4 5 6; 7 8 9]
>> A + 1
>> A * 2
>> B = [1 1 1; 2 2 2; 3 3 3]
>> A.*B
>> A*B
>> A+B
6. Elementy grafiki dwuwymiarowej
Zapoznać się z opisem poleceń plot, grid, xlabel, ylabel, title, hold korzystając z systemu pomocy MATLAB-a.
Wykonać następujące polecenia:
>> x = 0:0.5:2*pi
>> y = sin(x)
>> plot(x,y)
>> plot(x,y,’:’)
>> plot(x,y,’--’)
>> plot(x,y,’-.’)
>> plot(x,y,’-’)
>> plot(x,y,’*’)
>> plot(x,y,’-*’)>> plot(x,y,'-*g')
>> grid
>> y1 = cos(x)
>> plot(x,y,’b’)
>> hold on
>> plot(x,y1,’g’)
>> hold off
>> plot(x,y)
>> y
7. Elementy grafiki trójwymiarowej
Zapoznać się z opisem poleceń plot3, meshgrid, mesh, surf, colormap, gray korzystając z systemu pomocy
MATLAB-a.
Wykonać następujące polecenia:
>> t=0:0.1:20;
>> plot3(sin(t),cos(t),t)
>> t=pi:0.01:62;
>> plot3(sin(t)./t,cos(t)./t,t)
>> xlabel('x')
>> ylabel('y')
>> zlabel('t')
>> x = -5:5
>> y = -8:2
>> [X Y] = meshgrid(x,y)
>> Z = -X.^2 - Y.^2
>> mesh(X,Y,Z)
>> mesh(x,y,Z)
>> surf(x,y,Z)
>> surf(X,Y,Z)
>> colormap(gray)
>> help gray
>> colormap(hot)
>> colormap(pink)
>> colormap(flag)
4
Ćwiczenie 2. Teoria: sieci neuronowe
1. Model sztucznego neuronu
Podobnie jak w przypadku neuronowych sieci biologicznych, podstawowymi elementami z których buduje się
sztuczne sieci neuronowe są sztuczne neurony. Sztuczny neuron jest elementem, którego własności odpowiadają
wybranym własnościom neuronu biologicznego. Z założenia nie jest więc on jego wierną kopią, lecz elementem, który
powinien spełniać określone funkcje w sztucznej sieci neuronowej.
Ogólnie sztuczny neuron można rozpatrywać jako specyficzny przetwornik sygnałów działający według
następującej zasady: na wejście przetwornika doprowadzone są sygnały wejściowe, które następnie są mnożone przez
odpowiednie współczynniki wag, ważone sygnały wejściowe są następnie sumowane i na tej podstawie wyznacza się
aktywność neuronu.
Na rys. 1 przedstawiono model sztucznego neuronu. Składa się on z dwóch bloków: bloku sumowania
∑ i bloku
aktywacji f(
ϕ).
Rys. 1. Model neuronu
W bloku sumowania wykonywane jest algebraiczne sumowanie ważonych sygnałów wejściowych, oraz
generowany jest sygnał wyjściowy
ϕ :
b
b
u
w
T
R
i
i
i
+
=
+
=
∑
=
u
w
1
,
1
ϕ
(1)
gdzie: w – wektor współczynników wag w
1,i
, u – wektor sygnałów wejściowych u
i
, R – liczba wejść neuronu, b – próg
(bias).
Sygnał
ϕ poddawany jest przetwarzaniu przez blok aktywacji f(ϕ) realizujący zależność y = f(ϕ). Ostatecznie
sygnał wyjściowy ma postać:
( )
(
)
b
f
b
u
w
f
f
y
T
R
i
i
i
+
=
+
=
=
∑
=
u
w
1
,
1
ϕ
(2)
Funkcja aktywacji, w zależności od konkretnego celu, jakiemu służy neuron, może przyjmować różne postacie.
Niektóre z nich to:
• funkcja skokowa unipolarna (funkcja Heaviside’a)
( ) ( )
≤
>
=
=
0
0
0
1
1
x
x
x
x
f
jeśli
jeśli
(3)
• funkcja skokowa bipolarna
( ) ( )
≤
−
>
=
=
0
1
0
1
1
x
x
x
x
f
jeśli
jeśli
(4)
• funkcja liniowa
( )
ax
x
f
=
(5)
-5
0
5
0
0.5
1
-5
0
5
-1
0
1
-5
0
5
-5
0
5
5
• funkcja sigmoidalna unipolarna
( )
x
e
x
f
β
−
+
=
1
1
(6)
• funkcja sigmoidalna bipolarna (tangensoidalna)
( )
( )
x
x
x
x
e
e
e
e
x
x
f
−
−
+
−
=
= tanh
lub
( )
x
x
e
e
x
x
f
−
−
+
−
=
=
1
1
2
tanh
(7)
2. Sieci jednokierunkowe
Neurony połączone między sobą tworzą układ nazywany sztuczną siecią neuronową (w skrócie siecią
neuronową). W zależności od sposobu połączenia neuronów można wyróżnić sieci jednokierunkowe lub rekurencyjne
(ze sprzężeniem zwrotnym).
Sieć neuronowa jednokierunkowa jest złożona z neuronów ułożonych w warstwy o jednym kierunku przepływy
sygnałów. Połączenia międzywarstwowe występują jedynie między sąsiednimi warstwami.
Najprostszą siecią neuronową jest sieć jednowarstwowa. Tworzą ją neurony ułożone w jednej warstwie (rys. 2a,
2b). Każdy neuron posiada próg (bias) b
i
oraz wiele wag w
ij
prowadzonych do sygnałów wejściowych u
j
. Neurony
ułożone w pojedynczej warstwie działają niezależnie od siebie, stąd możliwości takiej sieci są ograniczone do
możliwości pojedynczych neuronów.
Rys. 2. Jednowarstwowa sieć neuronowa o R wejściach i S wyjściach: a) schemat pełny, b) schemat uproszczony
Każdy neuron realizuje odwzorowanie funkcyjne:
+
=
∑
=
i
R
j
j
ij
i
b
u
w
f
y
1
(8)
gdzie: R – liczba wejść, y
i
– i-te wyjście, w
ij
– waga dla i-tego neuronu i j-tego wejścia.
Powyższe równanie można zapisać również w zwięzłej postaci macierzowej:
(
)
b
Wu
y
+
= f
(9)
gdzie: u – wektor wejścia, y – wektor wyjścia, W – macierz wag.
Sieć jednowarstwowa ma niewielkie znaczenie praktyczne, jakkolwiek stosuje się ją nadal tam, gdzie istnienie
jednej warstwy jest wystarczające do rozwiązania określonego problemu.
Sieć wielowarstwową tworzą neurony ułożone w wielu warstwach, przy czym oprócz wejść i warstwy
wyjściowej istnieje co najmniej jedna warstwa ukryta.
Na rys. 3 przedstawiono sieć o jednej warstwie ukrytej, a na rys. 4 sieć o dwóch warstwach ukrytych (w
oznaczeniach przyjęto stosować indeks górny do oznaczania numeru warstwy).
-10
0
10
0
0.5
1
-10
0
10
-1
0
1
6
Rys. 3. Sieć dwuwarstwowa
Rys. 4. Sieć trójwarstwowa
Sieć dwuwarstwowa realizuje następujące odwzorowanie wektora wejściowego u na wektor wyjściowy y:
(
)
(
)
(
)
2
1
1
1
2
2
2
1
2
2
b
b
u
W
W
b
y
W
y
+
+
=
+
=
f
f
f
,
(10)
lub dla k-tego wyjścia:
( )
+
+
=
+
=
∑
∑
∑
=
=
=
k
S
i
i
R
j
j
ij
ki
k
S
i
i
ki
k
b
b
u
f
w
f
w
f
b
y
w
f
y
1
1
1
1
1
1
2
2
1
1
2
2
(11)
gdzie: R – liczba wejść, S
1
– liczba neuronów w 1-szej warstwie ukrytej, y
k
– k-te wyjście, w
ij
, w
ki
– wagi, b
k
, b
i
– progi.
Sieci neuronowe wykorzystujące ciągłe funkcje aktywacji mają ciągłe charakterystyki. Pozwala to na
bezpośrednie zastosowanie algorytmów gradientowych do uczenia takich sieci (uczenie polega na doborze wartości
wag według określonego algorytmu, które umożliwi dostosowanie działania sieci do warunków środowiskowych
określonych w postaci określonych wymagań co do odwzorowania danych wejściowych na wyjściowe).
Sieci z funkcjami liniowymi mają nieograniczony zakres wartości wyjściowej, ale realizują tylko odwzorowanie
liniowe. Z kolei sieci zawierające funkcje sigmoidalne mogą tworzyć dowolne odwzorowanie nieliniowe o
ograniczonym zakresie wyjściowym. Aby połączyć zalety obu tych sieci – zdolność realizowania nieliniowych
odwzorowań i nieograniczoność zakresu wyjściowego – należy w warstwach ukrytych zastosować sigmoidalne funkcje
aktywacji, natomiast w warstwie wyjściowej – liniowe.
Skokowe funkcje aktywacji przyjmuje się w tego typu systemach, gdzie sygnał wyjściowy powinien
przyjmować jedną z dwóch wartości dyskretnych. W tym przypadku algorytmy gradientowe, uznawane za
najskuteczniejsze w uczeniu, nie mogą mieć zastosowania, gdyż podstawowe wymaganie dotyczące funkcji celu nie
jest spełnione.
7
Przebieg ćwiczenia 2. Sieci neuronowe
1. Perceptron
Opis zastosowanych funkcji:
newp – tworzy nowy perceptron
NET = NEWP(PR,S,TF,LF)
PR – macierz określająca zakres wartości wejść sieci (liczba wejść jest określana na podstawie rozmiaru tej macierzy),
S – liczba neuronów,
TF – funkcja wyjścia perceptronu, domyślnie 'hardlim',
LF – funkcja ucząca, domyślnie 'learnp',
Funkcja zwraca: nowy perceptron net.
Więcej informacji: help newp.
newff – tworzy sieć neuronową propagacji wstecznej
NET = NEWFF(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) takes,
PR - macierz określająca zakres wartości wejść sieci (liczba wejść jest określana na podstawie rozmiaru tej macierzy),
Si - liczba neuronów w i-tej warstwie, N1 – liczba warstw,
TFi – funkcja wyjścia neuronów w i-tej warstwie, domyślnie 'tansig'.
BTF – funkcja ucząca sieć, domyślnie 'trainlm'.
BLF – funkcja ucząca wagi/bias, domyślnie 'learngdm'.
PF - funkcja błędu, domyślnie 'mse'.
Zwraca N warstwową sieć neuronową propagacji wstecznej.
Więcej informacji: help newff.
sim – oblicza odpowiedź sieci neuronowej na dany sygnał wejściowy
[Y,Pf,Af,E,perf] = SIM(net,P,Pi,Ai,T)
Parametry:
NET – Sieć neuronowa.
P – Wektor wejściowy.
Pi, Ai,T – parametry nieobowiązkowe
Funkcja zwraca:
Y – Wektor odpowiedzi sieci.
Więcej informacji: help network/sim.m.
Wykonać następujące polecenia:
Funkcją wyjścia perceptronu jest funkcja skokowa unipolarna.
Stworzenie wykresu funkcji wyjścia:
>> x=-5:0.1:5;
>> y=hardlim(x);
>> plot(x,y)
Sprawdzenie wartości funkcji w punkcie 0:
>> hardlim(0)
Tworzenie wektorów uczących P oraz T:
– wektor wejściowy sieci – pary liczb rzeczywistych (punkty na płaszczyźnie):
>> P=[-5, -5, 3, -1; -5, 5, -5, 10]
– wektor wyjściowy sieci – wartość odpowiadająca danej parze wektora wejściowego:
>> T=[1 1 0 0]
Tworzenie nowego perceptronu i przypisanie go zmiennej net:
>> net=newp([-10 10; -10 10], 1);
Inicjowanie wag sieci (nadawanie przypadkowych wartości wagom):
>> net=init(net);
Wyświetlenie wektora wag (zapisać wartości):
>> net.IW{1}
Wyświetlenie wartości biasu (zapisać wartość):
8
>> net.b{1}
Obliczenie odpowiedzi sieci na wektor wejściowy P:
>> sim(net,P)
Czy odpowiedź sieci jest równa wektorowi wyjściowemu T (wyświetlić wektor T)?
Uczenie sieci:
>> net=train(net,P,T);
Przeanalizować wykres średniokwadratowego błędu uczenia sieci.
Wyświetlenie wektora wag:
>> net.IW{1}
Wyświetlenie wartości biasu:
>> net.b{1}
Czy wektor wag oraz bias uległy zmianie?
Obliczenie odpowiedzi sieci na wektor wejściowy P:
>> sim(net,P)
Czy odpowiedź jest równa wektorowi wyjściowemu T (wyświetlić wektor T)?
Wagi oraz bias wyznaczają prostą o równaniu y=(-net.IW{1}(1)*x - net.b{1})./net.IW{1}(2) rozgraniczającą
dwie półpłaszczyzny. Do jednej z nich należą punkty, którym przyporządkowano wartości 1, a na drugiej punkty,
którym przyporządkowano wartości 0.
Wyświetlenie wektora wejściowego i wyjściowego;
symbolem kółko (o) oznaczono współrzędne punktów, którym przyporządkowano wartość 0,
symbolem plus (+) oznaczono współrzędne punktów, którym przyporządkowano wartość 1:
>> plotpv(P,T); grid
Wyświetlenie prostej rozdzielającej półpłaszczyzny:
>> plotpc(net.IW{1}, net.b{1})
Sprawdzić odpowiedź sieci dla punktów należących do pierwszej i drugiej półpłaszczyzny, np. punkty (-6,6) i (10,6):
>> sim(net,[-6;-6])
>> sim(net,[10;6])
Tworzenie wektorów uczących P oraz T:
– wektor wejściowy sieci – pary liczb rzeczywistych (punkty na płaszczyźnie):
>> P=[-5, -5, 3, -1, 4; -5, 5, -5, 10, 10]
– wektor wyjściowy sieci – wartość odpowiadająca danej parze wektora wejściowego:
>> T=[1 1 0 0 1]
Wyświetlenie wektora wejściowego i wyjściowego:
>> plotpv(P,T); grid
Zwrócić uwagę na położenie dodanego punktu (4,10).
Inicjowanie wag sieci (nadawanie przypadkowych wartości wagom):
>> net=init(net);
Uczenie sieci:
>> net=train(net,P,T);
Obliczenie odpowiedzi sieci na wektor wejściowy P za pomocą funkcji sim
>> sim(net,P)
Porównać odpowiedź sieci z wektorem T.
Czy sieć została poprawnie wytrenowana? Dlaczego?
2. Aproksymacja funkcji
2.1 Dokładność aproksymacji
Tworzenie wektorów uczących P oraz T:
>> P=-10:0.2:10;
>> T=sin(P);
>> plot(P,T,'-o'); grid
Tworzenie dwuwarstwowej sieci neuronowej (10 neuronów w warstwie wejściowej i 1 w wyjściowej):
>> net=newff([-10 10],[10 1],{'tansig' 'purelin'});
Maksymalna liczba prezentacji danych uczących (liczba epok):
>> net.trainParam.epochs=7;
Inicjowanie wag sieci (nadawanie przypadkowych wartości wagom):
>> net=init(net);
Obliczenie odpowiedzi nie wytrenowanej sieci na wektor wejściowy P:
9
>> y=sim(net,P);
>> figure
>> plot(P,T,'-o',P,y,'-*'); grid
Uczenie sieci:
>> net=train(net,P,T);
Obliczenie odpowiedzi wytrenowanej sieci na wektor wejściowy P:
>> y=sim(net,P);
>> figure
>> plot(P,T,'-o',P,y,'-*'); grid
Ocenić dokładność aproksymacji (powiększyć wykres). Zapamiętać końcowy błąd uczenia.
Ponownie zainicjować wagi sieci i przeprowadzić jej uczenie dla 100 epok (net.trainParam.epochs=100).
Przedstawić dane uczące oraz odpowiedź sieci na wykresie.
Jak wpływa liczba epok na dokładność wytrenowania sieci neuronowej (na dokładność aproksymacji) oraz czas
uczenia.
Stworzyć sieć dwuwarstwową:
-
warstwa 1. (ukryta): 4 neuronów, tangensoidalna funkcja wyjścia (tansig),
-
warstwa 2. (wyjściowa): 1 neuron, liniowa funkcja wyjścia (purelin).
Przyjąć liczbę epok równą 100, przeprowadzić uczenie sieci dla danych uczących P oraz T.
Przedstawić na wykresie dane uczące oraz odpowiedź sieci na wektor P.
Ocenić dokładność aproksymacji.
Jak wpływa liczba neuronów w warstwie ukrytej na dokładność wytrenowania sieci neuronowej (na dokładność
aproksymacji) oraz czas uczenia.
2.2 Zdolność uogólniania sieci neuronowej
Generowanie danych uczących:
>> P=-pi:0.4:pi;
>> T=sin(P);
>> plot(P,T,'-*');
>> grid
Stworzyć sieć dwuwarstwową (zakres wartości wejść [-pi, pi]):
-
warstwa 1. (ukryta): 6 neuronów, tangensoidalna funkcja wyjścia (tansig),
-
warstwa 2. (wyjściowa): 1 neuron, liniowa funkcja wyjścia (purelin).
Przyjąć liczbę epok równą 100, przeprowadzić uczenie sieci dla danych uczących P oraz T.
Przedstawić na wykresie dane uczące oraz odpowiedź sieci na wektor P.
Ocenić dokładność aproksymacji.
Obliczenie odpowiedzi sieci na wektor wejściowy P1, zawierający punkty, których sieć neuronowa nie była
uczona:
Wygenerować wektor P1 z zakresu od -
π do π, z rozdzielczością 0,1.
Obliczyć odpowiedzi sieci y1 na wektor wejściowy P1.
Przedstawić na wykresie dane uczące oraz odpowiedź sieci na wektor P.
Przyjrzeć się otoczeniom ekstremów funkcji sinus (powiększyć wykres w tych przedziałach).
Porównanie odpowiedzi sieci na wektor wejściowy P1 z dokładnymi wartościami funkcji sin:
Wygenerować wektor ys wartości funkcji sinus dla wektora P1.
Przedstawić na wykresie funkcję sinus (wektora P1 oraz ys) oraz odpowiedź sieci na wektor P1.
Przyjrzeć się otoczeniom ekstremów funkcji sinus (powiększyć wykres w tych przedziałach).
2.3 Zdolność aproksymacyjna dwuwarstwowej sieci liniowej
Generowanie danych uczących:
>> P=-pi:0.4:pi;
>> T=sin(P);
>> plot(P,T,'-*');
>> grid
Stworzyć sieć dwuwarstwową:
10
-
warstwa 1. (ukryta): 10 neuronów, liniowa funkcja wyjścia (purelin),
-
warstwa 2. (wyjściowa): 1 neuron, liniowa funkcja wyjścia (purelin).
Przeprowadzić uczenie sieci dla danych uczących P oraz T.
Przedstawić na wykresie dane uczące oraz odpowiedź sieci na wektor P.
Ocenić dokładność aproksymacji (powiększyć wykres).
Czy sieć liniowa może dobrze aproksymować funkcję nieliniową?
11
Rozmyty system wyznaczania napiwków
1. Jedno wejście, jedno wyjście
Wejście 1: obsługa
funkcje Gaussa (gaussmf)
zła – parametry [1.5, 0],
dobra – parametry [1.5, 5],
bardzo dobra – parametry [1.5, 10]
0
2
4
6
8
10
0
0.2
0.4
0.6
0.8
1
zla
dobra
b.dobra
Wyjście: napiwek
funkcje
trójkątne (trimf)
mały – parametry: [0, 5, 10], średni – parametry: [10, 15, 20], wysoki – parametry: [20, 25, 30]
0
5
10
15
20
25
30
0
0.2
0.4
0.6
0.8
1
maly
sredni
wysoki
Baza reguł:
R1: Jeśli (obsługa = zła), to (napiwek = mały),
R2: Jeśli (obsługa = dobra), to (napiwek = średni),
R3: Jeśli (obsługa = bdobra), to (napiwek = wysoki).
2. Dwa wejścia, jedno wyjście
Wejście 2: jedzenie
funkcje trapezowe (tramf)
niesmaczne – parametry: [0, 0, 1, 3], wyśmienite – parametry: [7, 9, 10, 10]
0
2
4
6
8
10
0
0.2
0.4
0.6
0.8
1
niesmaczne
wysmienite
Baza reguł:
R1: Jeśli (obsługa = zła) lub (jedzenie = niesmaczne), to (napiwek = mały),
R2: Jeśli (obsługa = dobra), to (napiwek = średni),
R3: Jeśli (obsługa = bdobra) lub (jedzenie = wyśmienite), to (napiwek = wysoki).