Twój pierwszy model Keras z nauką przenoszenia

1. Omówienie

W tym module dowiesz się, jak utworzyć klasyfikator Keras. Zamiast próbować wymyślić idealną kombinację warstw sieci neuronowych do rozpoznawania kwiatów, zaczniemy najpierw stosować technikę zwaną transfer learning, aby dostosować zaawansowany, wytrenowany model do naszego zbioru danych.

W tym module znajdziesz niezbędne wyjaśnienia teorii dotyczące sieci neuronowych. To dobry punkt wyjścia dla deweloperów, którzy chcą poznać deep learning.

Ten moduł to część 2 projektu „Keras w TPU” serii. Możesz to zrobić w poniższej kolejności lub samodzielnie.

ca8cc21f6838eccc.png

Czego się nauczysz

  • Tworzenie własnego klasyfikatora obrazów Keras z warstwą softmax i stratą entropii krzyżowej
  • Aby oszukiwać 😈, należy korzystać z nauczania transferowego zamiast tworzyć własne modele.

Prześlij opinię

Jeśli zauważysz, że w tym laboratorium z kodem coś jest nie tak, daj nam znać. Opinię można przesłać, korzystając z formularza dotyczącego problemów na GitHubie [link do przesyłania opinii].

2. Krótki przewodnik po Google Colaboratory

Ten moduł używa Google Collaboratory i nie wymaga konfiguracji. Colaboratory to internetowa platforma do obsługi notatników do celów edukacyjnych. Oferuje bezpłatne trenowanie dotyczące CPU, GPU i TPU.

688858c21e3beff2.png

Aby zapoznać się z Colaboratory, możesz otworzyć ten przykładowy notatnik i przejrzeć kilka komórek.

c3df49e90e5a654f.png Welcome to Colab.ipynb

Wybierz backend TPU

8832c6208c99687d.png

W menu Colab wybierz Środowisko wykonawcze > Zmień typ środowiska wykonawczego i wybierz TPU. W tym module z kodem wykorzystasz potężną jednostkę TPU (Tensor Processing Unit) wyposażoną w procesor akceleracji sprzętowej. Połączenie ze środowiskiem wykonawczym następuje automatycznie przy pierwszym uruchomieniu. Możesz też skorzystać z opcji „Połącz” w prawym górnym rogu.

Wykonywanie notatnika

76d05caa8b4db6da.png

Uruchomienie komórki po kolei przez kliknięcie komórki i naciśnięcie klawiszy Shift+ENTER. Możesz też uruchomić cały notatnik, wybierając Środowisko wykonawcze > Uruchom wszystko

Spis treści

429f106990037ec4.png

Wszystkie notatniki mają spis treści. Możesz go otworzyć, klikając czarną strzałkę po lewej stronie.

Ukryte komórki

edc3dba45d26f12a.png

W niektórych komórkach będzie widoczny tylko tytuł. Jest to funkcja notatnika specyficzna dla Colab. Można je dwukrotnie kliknąć, aby zobaczyć w nich kod, ale zwykle nie jest to zbyt interesujące. Zwykle są to funkcje wspomagające lub wizualizacyjne. Nadal musisz uruchomić te komórki, aby zdefiniować funkcje znajdujące się w nich.

Uwierzytelnianie

cdd4b41413100543.png

Colab może uzyskać dostęp do Twoich prywatnych zasobników Google Cloud Storage, o ile uwierzytelnisz się na autoryzowanym koncie. Powyższy fragment kodu aktywuje proces uwierzytelniania.

3. [INFO] Klasyfikator sieci neuronowych 101

W skrócie

Jeśli znasz już wszystkie terminy wyróżnione pogrubieniem w następnym akapicie, możesz przejść do następnego ćwiczenia. Jeśli dopiero zaczynasz przygodę z technologią deep learning, witamy w serwisie i czytaj dalej.

W przypadku modeli utworzonych jako sekwencja warstw Keras dostępny jest interfejs Sequential API. Na przykład klasyfikator obrazów wykorzystujący 3 gęste warstwy możesz zapisać w Keraście w taki sposób:

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=[192, 192, 3]),
    tf.keras.layers.Dense(500, activation="relu"),
    tf.keras.layers.Dense(50, activation="relu"),
    tf.keras.layers.Dense(5, activation='softmax') # classifying into 5 classes
])

# this configures the training of the model. Keras calls it "compiling" the model.
model.compile(
  optimizer='adam',
  loss= 'categorical_crossentropy',
  metrics=['accuracy']) # % of correct answers

# train the model
model.fit(dataset, ... )

688858c21e3beff2.png

Gęsta sieć neuronowa

Jest to najprostsza sieć neuronowa do klasyfikowania obrazów. Składa się z „neuronów” ułożone w warstwy. Pierwsza warstwa przetwarza dane wejściowe, a potem wprowadza dane wyjściowe do innych warstw. Nazywamy to „gęstym” bo każdy neuron jest połączony ze wszystkimi neuronami w poprzedniej warstwie.

c21bae6dade487bc.png

Można przekazać obraz do takiej sieci, spłaszczając wartości RGB wszystkich jego pikseli do długiego wektora i używając go jako danych wejściowych. Nie jest to najlepsza metoda rozpoznawania obrazów, ale postaramy się ją ulepszyć.

Neurony, aktywacje, RELU

„Neuron” oblicza ważoną sumę wszystkich jego danych wejściowych i dodaje wartość zwaną „odchyleniem” i umożliwia stosowanie w niej tzw. „funkcji aktywacji”. Wagi i odchylenia są na początku nieznane. Zostaną zainicjowane losowo i nauczą się je. przez trenowanie sieci neuronowej na wielu znanych danych.

644f4213a4ee70e5.png

Najpopularniejszą funkcją aktywacji jest RELU (prostej jednostki liniowej). Jest to bardzo prosta funkcja, jak widać na wykresie powyżej.

Aktywacja Softmax

Powyższa sieć kończy się warstwą 5-neuronową, ponieważ kwiaty dzielimy na 5 kategorii (róża, tulipan, mniszek, stokrotka, słonecznik). Neurony w warstwach pośrednich są aktywowane przy użyciu klasycznej funkcji aktywacji RELU. Na ostatniej warstwie chcemy jednak obliczyć liczby z zakresu od 0 do 1, które reprezentują prawdopodobieństwo, że dany kwiat to róża, tulipan itd. W tym celu użyjemy funkcji aktywacji o nazwie „softmax”.

Zastosowanie funkcji softmax do wektora odbywa się przez zastosowanie wykładniczej każdego pierwiastka, a następnie normalizację wektora, zwykle z użyciem normy L1 (sumy wartości bezwzględnych), aby suma wartości wynosiła 1 i można ją było zinterpretować jako prawdopodobieństwo.

ef0d98c0952c262d.png d51252f75894479e.gif

Utrata entropii krzyżowej

Skoro nasza sieć neuronowa generuje prognozy na podstawie obrazów wejściowych, musimy sprawdzić, na ile są dobre, czyli odległość między informacjami z sieci a prawidłowymi odpowiedziami, często nazywanymi „etykietami”. Pamiętaj, że wszystkie obrazy w zbiorze danych mają prawidłowe etykiety.

Każda odległość byłaby odpowiednia, ale dla problemów klasyfikacyjnych można zastosować tak zwaną „dystans entropii krzyżowej” jest najskuteczniejszy. Nazywamy to błędem lub stratą. funkcja:

7bdf8753d20617fb.png

Efekt gradientu

„Szkolenie” sieć neuronowa faktycznie polega na używaniu obrazów i etykiet treningowych do korygowania wag i odchyleń w celu zminimalizowania funkcji utraty entropii krzyżowej. Działa to w następujący sposób.

Entropia krzyżowa jest funkcją wag, odchyleń, pikseli obrazu treningowego i jego znanej klasy.

Jeśli obliczamy częściowe pochodne entropii krzyżowej względem wszystkich wag i wszystkich odchyleń, uzyskujemy „gradient” obliczony dla danego obrazu, etykiety oraz bieżącej wartości wag i odchylenia. Pamiętaj, że możemy mieć miliony wag i odchyleń, więc obliczenie gradientu wymaga sporo wysiłku. Na szczęście robi to za nas Tensorflow. Matematyczną właściwością gradientu jest to, że wskazuje on „do góry”. Chcemy dotrzeć tam, gdzie entropia krzyżowa jest niska, więc idziemy w przeciwną stronę. Wagi i odchylenia aktualizujemy według części gradientu. Następnie robimy to samo w pętli trenowania z kolejnymi partiami obrazów i etykiet do trenowania. Mamy nadzieję, że zjawisko to zbiega się w miejsce, w którym entropia krzyżowa jest minimalna, ale nic nie gwarantuje, że ta minimalna wartość będzie unikalna.

gradient 2.png

Krótkie partie i pęd

Możesz obliczyć gradient tylko na jednym przykładowym obrazie i od razu zaktualizować wagi i odchylenia, ale w przypadku grupy np. 128 obrazów uzyskasz gradient, który lepiej odpowiada ograniczeniom nałożonym przez różne przykładowe obrazy i z większym prawdopodobieństwem będzie szybciej zbliżyć się do rozwiązania. Wielkość minigrupy, którą można dostosować, jest parametrem.

Technika ta, czasem nazywana „stochastycznym gradientem”, ma jeszcze jedną, bardziej pragmatyczną zaletę: praca z wsadami oznacza również pracę z większymi macierzami, które zwykle łatwiej można zoptymalizować w przypadku układów GPU i TPU.

Zbieżność może być jednak nieco chaotyczna i może nawet zostać zatrzymana, jeśli wektor gradientu składa się wyłącznie ze zera. Czy to oznacza, że znaleźliśmy minimum? Nie zawsze. Minimalna lub maksymalna wartość komponentu gradientu może wynosić zero. W przypadku wektora gradientu zawierającego miliony elementów (jeśli wszystkie są zerami), prawdopodobieństwo, że każde zero odpowiada minimum i żadnym z nich nie znajdzie się w punkcie maksymalnym, jest bardzo małe. W przestrzeni obejmującej wiele wymiarów siedziska są dość powszechne i nie chcemy na nich poprzestać.

52e824fe4716c4a0.png

Ilustracja: siodło Gradient wynosi 0, ale nie jest on minimalny we wszystkich kierunkach. (Źródło grafiki: Wikimedia: By Nicoguaro – własne materiały, CC BY 3.0)

Rozwiązaniem jest dodanie pewnego pędu do algorytmu optymalizacji, tak aby mógł bez wahania pokonywać kolejne etapy.

Słownik

zbiorcze lub małowsadowe: trenowanie jest zawsze wykonywane na grupach danych i etykiet do trenowania. Ułatwia to stosowanie algorytmu. Grupa „zbiorcza” jest zwykle pierwszym wymiarem tensorów danych. Na przykład tensor kształtu [100, 192, 192, 3] zawiera 100 obrazów o wymiarach 192 x 192 piksele, z 3 wartościami na piksel (RGB).

Utrata entropii krzyżowej: specjalna funkcja straty często używana w klasyfikatorach.

gęsta warstwa: warstwa neuronów, w której każdy neuron jest połączony ze wszystkimi neuronami z poprzedniej warstwy.

funkcje: dane wejściowe sieci neuronowej są czasami nazywane „cechami”. Sztuka ustalania, które części zbioru danych (lub ich kombinacje) przekazać do sieci neuronowej w celu uzyskania dobrych prognoz, nosi nazwę „inżynierii cech”.

labels: inna nazwa „zajęć” lub popraw odpowiedzi w rozwiązywaniu zadań z klasyfikacją nadzorowaną

szybkość uczenia się: odsetek gradientu, według którego wagi i odchylenia są aktualizowane w każdej iteracji pętli trenowania.

logits: dane wyjściowe warstwy neuronów przed zastosowaniem funkcji aktywacji są nazywane „logitami”. Termin pochodzi z „funkcji logistycznej” inaczej „funkcja sigmoidalna” która była najpopularniejszą funkcją aktywacyjną. „Dane wyjściowe Neuron przed funkcją logistyki” została skrócona do „logits”.

strata: funkcja błędu porównująca dane wyjściowe sieci neuronowej z prawidłowymi odpowiedziami.

neuron: oblicza ważoną sumę swoich danych wejściowych, dodaje odchylenie i dostarcza wynik przy użyciu funkcji aktywacji.

kodowanie jednorazowe: klasa 3 z 5 jest zakodowana jako wektor pięciu elementów, z wyjątkiem trzeciego, czyli 1.

relu: wyprostowana jednostka liniowa. Popularna funkcja aktywacji neuronów.

sigmoid: inna funkcja aktywacji, która była kiedyś popularna i przydaje się w szczególnych przypadkach.

softmax: specjalna funkcja aktywacji, która działa na wektorze, zwiększa różnicę między największym składnikiem a pozostałymi, a także normalizuje wektor do sumy 1, co umożliwia zinterpretowanie go jako wektora prawdopodobieństw. Używany jako ostatni krok w klasyfikatorach.

tensor: „tensor”; jest jak macierz, ale z dowolną liczbą wymiarów. Jednowymiarowy tensor jest wektorem. Tensor dwuwymiarowy to macierz. Tensory mogą mieć 3, 4, 5 lub więcej wymiarów.

4. Przekazanie nauki

Gęste warstwy prawdopodobnie nie wystarczą do rozwiązania problemu z klasyfikacją obrazów. Musimy poznać warstwy splotowe i różne sposoby ich układania.

Ale możemy też pójść na skróty! Dostępne do pobrania są w pełni wytrenowane splotowe sieci neuronowe. Można odciąć ostatnią warstwę, czyli nagłówek klasyfikacji softmax, i zastąpić ją własną. Wszystkie wytrenowane wagi i odchylenia pozostają bez zmian. Ponownie trenujesz tylko dodaną warstwę softmax. Ta metoda nazywa się uczeniem transferowym i działa, o ile zbiór danych, na którym została wstępnie wytrenowana sieć neuronowa, jest „wystarczająco bliski”. do pana.

Ćwiczenie

Otwórz ten notatnik, uruchom komórki (Shift + ENTER) i postępuj zgodnie z instrukcjami w miejscu, w którym pojawia się komunikat „WYMAGANE PRACY”. .

c3df49e90e5a654f.png Keras Flowers transfer learning (playground).ipynb

Informacje dodatkowe

Dzięki uczeniu się w praktyce można korzystać zarówno z zaawansowanych splotowych architektur sieci neuronowych opracowanych przez najlepszych badaczy, jak i z wcześniejszego trenowania na ogromnym zbiorze obrazów. W naszym przypadku będziemy przenosić dane z sieci wytrenowanej w ImageNet – bazie zdjęć z wieloma roślinami i zdjęciami plenerowymi, która jest wystarczająco blisko kwiatów.

b8fc1efd2001f072.png

Ilustracja: wykorzystanie złożonej splotowej sieci neuronowej, która została już wytrenowana jako czarna ramka, ponownie trenuje tylko głowicę klasyfikacji. To jest nauczanie transferowe. Później zobaczymy, jak działają te skomplikowane układy splotowych warstw. Na razie ten problem ma ktoś inny.

Przenoszenie nauki w Keras

W Keras możesz utworzyć instancję wytrenowanego modelu z kolekcji tf.keras.applications.*. Na przykład MobileNet V2 to bardzo dobra architektura splotowa o doskonałej wielkości. Jeśli wybierzesz include_top=False, uzyskasz już wytrenowany model bez ostatniej warstwy softmax, dzięki czemu możesz dodać własny:

pretrained_model = tf.keras.applications.MobileNetV2(input_shape=[*IMAGE_SIZE, 3], include_top=False)
pretrained_model.trainable = False

model = tf.keras.Sequential([
    pretrained_model,
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(5, activation='softmax')
])

Zwróć też uwagę na ustawienie pretrained_model.trainable = False. Blokuje ciężary i odchylenia wytrenowanego modelu, dzięki czemu trenujesz tylko warstwę softmax. Zwykle wiąże się to ze stosunkowo niewielką wagą i może zostać przeprowadzone szybko i bez konieczności użycia bardzo dużego zbioru danych. Jeśli jednak masz dużo danych, pretrained_model.trainable = True może usprawnić naukę przenoszenia. Wstępnie wytrenowane wagi przyjmują świetne wartości początkowe, które można jeszcze dostosować przez trenowanie, aby lepiej dopasować je do problemu.

Na koniec zwróć uwagę na warstwę Flatten() włożoną przed gęstą warstwą softmax. Gęste warstwy działają na płaskich wektorach danych, ale nie wiemy, czy właśnie tak zwraca już wytrenowany model. Dlatego musimy to zrobić. W następnym rozdziale, przechodząc do architektur splotowych, wyjaśnimy format danych zwracany przez warstwy splotowe.

Przy takim podejściu możesz uzyskać dokładność na poziomie 75%.

Rozwiązanie

Oto notatnik rozwiązań. Możesz go użyć, jeśli napotkasz problemy.

c3df49e90e5a654f.png Keras Flowers transfer learning (solution).ipynb

Omówione zagadnienia

  • 🤔 Jak napisać klasyfikator w Keraście
  • 🤓 z ostatnią warstwą softmax i stratą entropii krzyżowej
  • 😈 Zmień naukę
  • 🤔 Wytrenuj swój pierwszy model
  • 🧐 Po straceniu i dokładności podczas treningu

Poświęć chwilę na przejrzenie tej listy kontrolnej.

5. Gratulacje!

Możesz teraz utworzyć model Keras. Przejdź do następnego modułu, aby dowiedzieć się, jak tworzyć warstwy splotowe.

TPU w praktyce

Układy TPU i GPU są dostępne w Cloud AI Platform:

Bardzo zależy nam na opiniach użytkowników. Daj nam znać, jeśli zauważysz, że w tym module coś jest nie tak lub jeśli uważasz, że coś jest nie tak. Opinię można przesłać, korzystając z formularza dotyczącego problemów na GitHubie [link do przesyłania opinii].

HR.png

Martin Görner ID small.jpg
Autor: Martin Görner
Twitter: @martin_gorner

logo Tensorflow.jpg
www.tensorflow.org