W trakcie opracowywania…

Skonstruujemy sieci neuronowe różnych typów do klasyfikacji obrazów kwiatów. Zestaw danych można pobrać stąd: https://www.kaggle.com/alxmamaev/flowers-recognition/downloads/flowers-recognition.zip/2. Zawiera zbiory zdjęć 5 rodzajów kwiatów (w odpowiednich katalogach): stokrotki (daisy), mniszka lekarskiego (dandelion), róży (rose), słonecznika (sunflower), tulipana (tulip).

Załączamy biblioteki i funkcje potrzebne do realizacji zadania.

Wykorzystując zestaw obrazów znajdujący się pod linkiem powyżej przygotujemy zbiory obrazów i ich kategorii dla etapów uczenia i walidacji oraz etapu testowego po wyuczeniu sieci za pomocą poniższej funkcji. Sieci neuronowe tutaj rozpatrywane mają określoną liczbę wejść, a ponieważ zdjęcia są o różnych rozdzielczościach, należy dostosować ich wymiary do potrzeb sieci. Funkcja transform_image przygotowuje zdjęcie do odpowiedniego formatu.

Jeszcze zdefiniujmy kilka przydatnych funkcji.

Wielowarstwowy perceptron (MLP)

Do tego typu zadań sieć MLP nie jest najlepszym rozwiązaniem, choćby ze względu na bardzo dużą liczbę połączeń przy większej liczbie warstw, co powoduje długi czas uczenia, powolną zbieżność do minimum. Ponadto taka sieć słabo generalizuje pozyskaną wiedzę i jest wrażliwa na położenie obiektu na obrazie.

Pomimo to warto wiedzieć jak taką sieć skonstruować i warto pobawić się nią. Dlatego, że może świetnie nadawać się do innych zadań klasyfikacji wielokryterialnej, a także zwykle stanowi ostatni poziom w sieciach konwolucyjnych (CNN).

Poniżej przedstawiono wykresy uczenia dla podanych parametrów. Wskazują na bardzo dużą wariancję tego typu modeli, która cechuje sieć z niezłą zbieżnością podczas nauki na zbiorze uczącym, a jednocześnie z bardzo słabymi osiągami dla zbioru walidacyjnego.

Sieci splotowe (CNN)

W zadaniach rozpoznawania obrazów znacznie lepiej spisują się neuronowe sieci splotowe. Zazwyczaj jako warstwy końcowe takiej sieci stosuje się jednokierunkowe w pełni połączone warstwy jak powyżej. Jednak poprzedzające je warstwy splotowe są w stanie wydobyć pewne cechy z danych wejściowych, które następnie lepiej klasyfikować za pomocą MLP. Poniżej pokazano odgórnie przyjętą architekturę CNN i wykres, który pokazuje jej znacznie lepsze właściwości generalizacji.

Powyższe wykresy wskazują na zbyt duże dopasowanie sieci do zbioru treningowego. Należałoby zastosować techniki zabezpieczające przed taką sytuacją:

  1. powiększenie zbioru treningowego, np. poprzez sztuczne wygenerowanie dodatkowych obrazów przeprowadzając operacje na istniejących, np. zoom, obrót, przesunięcie (o losowe wartości),
  2. losowe „uśpienie” pewnej części neuronów podczas uczenia sieci,
  3. wczesne zatrzymanie uczenia, gdy dokładność zmierzona na zbiorze walidacyjnym będzie zadowalająca.