This commit is contained in:
Sara Kowalska 2020-05-07 14:07:13 +02:00
commit 27a5abb035

View File

@ -43,13 +43,13 @@ Na początek inicjalizuję sieć neuronową, w moim przypadku jest to sieć sekw
> model.add(MaxPooling2D(pool_size=(2, 2))) > model.add(MaxPooling2D(pool_size=(2, 2)))
> ``` > ```
Jako pierwszą do modelu dołączam warstwę **operacji splotu** (**konwolucji**), która polega na przesuwaniu filtru (mnożenie przez macierz, tutaj 2x2, splot = 32) wzdłuż obrazu, aby dla każdego jego fragmentu obliczyć splot między nim a filtrem (ekstrakcja cech). Z tą warstwą dodany jest również format wejścia (dodany raz, odczytywany jest przez wszystkie kolejne warstwy). Jako pierwszą do modelu dołączam warstwę **operacji splotu** (**konwolucji**), która polega na przesuwaniu filtru (mnożenie przez macierz, tutaj 2x2, liczba filtrów, których dana warstwa się uczy = 32) wzdłuż obrazu, aby dla każdego jego fragmentu obliczyć splot między nim a filtrem (ekstrakcja cech). Z tą warstwą dodany jest również format wejścia (dodany raz, odczytywany jest przez wszystkie kolejne warstwy).
Następnie dodana zostaje funkcja aktywacji - **ReLU**: f(x) = x+ = max(0, x), x - dane wejściowe, która zeruje negatywne wartości (korzystamy z niej, ponieważ w wyniku spodziewamy się uzyskać prawdopodobieństwo, które nie może być ujemne). Następnie dodana zostaje funkcja aktywacji - **ReLU**: f(x) = x+ = max(0, x), x - dane wejściowe, która zeruje negatywne wartości (korzystamy z niej, ponieważ w wyniku spodziewamy się uzyskać prawdopodobieństwo, które nie może być ujemne).
Kolejna zostaje załadowana warstwa **MaxPooling2D**, która zmienia rozdzielczość obrazka. Jest ona podobna do zastosowania filtru, z tym że tutaj nie stosujemy mnożenia, a wyciągamy największą wartość z wycinka obrazka. Dodatkowo tu "okno" operacji przesuwa się o swoją szerokość, a nie jak w Conv2D o 1. punkt , dzięki czemu zmniejszamy rozmiar danych w sieci oraz liczbę trenowanych cech. Kolejna zostaje załadowana warstwa **MaxPooling2D**, która zmienia rozdzielczość obrazka. Jest ona podobna do zastosowania filtru, z tym że tutaj nie stosujemy mnożenia, a wyciągamy największą wartość z wycinka obrazka. Dodatkowo tu "okno" operacji przesuwa się o swoją szerokość, a nie jak w Conv2D o 1. punkt. Dzięki temu zmniejszamy rozmiar danych w sieci oraz liczbę trenowanych cech.
W ten sam sposób załadowane zostają kolejne dwie sekwencje warstw (w 3. zwiększamy splot na 64). W ten sam sposób załadowane zostają kolejne dwie sekwencje warstw (w 3. zwiększamy liczbę filtrów na 64).
> ```python > ```python
> model.add(Flatten()) > model.add(Flatten())
@ -131,7 +131,6 @@ W funkcji *main()* tworzę model sekwencyjny o parametrach uczonego przeze mnie
> ``` > ```
<img src="https://git.wmi.amu.edu.pl/s444412/DSZI_2020_Projekt/raw/master/Raporty/plansza_menu.png" align="right" width="350"/> <img src="https://git.wmi.amu.edu.pl/s444412/DSZI_2020_Projekt/raw/master/Raporty/plansza_menu.png" align="right" width="350"/>
Po wybraniu na ekranie głównym opcji *Rozpoznawanie talerzy*, uruchomiona zostaje funkcja *Classify()*, która inicjuje przykładowy początkowy stan restauracji (dodanie kilku klientów, przypisanie im stołów i talerzy) oraz nakazuje agentowi podejście do każdego z klientów i sprawdzenie czy posiadany przez niego talerz jest pusty czy pełny poprzez funkcję *predictAndShowImg()*: Po wybraniu na ekranie głównym opcji *Rozpoznawanie talerzy*, uruchomiona zostaje funkcja *Classify()*, która inicjuje przykładowy początkowy stan restauracji (dodanie kilku klientów, przypisanie im stołów i talerzy) oraz nakazuje agentowi podejście do każdego z klientów i sprawdzenie czy posiadany przez niego talerz jest pusty czy pełny poprzez funkcję *predictAndShowImg()*:
> ```python > ```python