CNTK - Tworzenie pierwszej sieci neuronowej

W tym rozdziale zajmiemy się tworzeniem sieci neuronowej w CNTK.

Zbuduj strukturę sieci

Aby zastosować koncepcje CNTK do zbudowania naszego pierwszego NN, będziemy używać NN do klasyfikowania gatunków kwiatów tęczówki na podstawie właściwości fizycznych szerokości i długości działek oraz szerokości i długości płatków. Zbiór danych, którego będziemy używać, zbiór danych tęczówki opisujący właściwości fizyczne różnych odmian kwiatów tęczówki -

  • Długość działki
  • Szerokość działki
  • Długość płatka
  • Szerokość płatka
  • Klasa tj. Iris setosa lub iris versicolor lub iris virginica

Tutaj będziemy budować zwykły NN zwany wyprzedzającym NN. Zobaczmy kroki implementacji, aby zbudować strukturę NN -

Step 1 - Najpierw zaimportujemy niezbędne komponenty, takie jak nasze typy warstw, funkcje aktywacji i funkcję, która pozwala nam zdefiniować zmienną wejściową dla naszego NN, z biblioteki CNTK.

from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu

Step 2- Następnie stworzymy nasz model za pomocą funkcji sekwencyjnej. Po utworzeniu będziemy go karmić wybranymi warstwami. Tutaj utworzymy dwie odrębne warstwy w naszym NN; jeden z czterema neuronami, a drugi z trzema neuronami.

model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])

Step 3- W końcu, aby skompilować NN, połączymy sieć ze zmienną wejściową. Posiada warstwę wejściową z czterema neuronami i warstwę wyjściową z trzema neuronami.

feature= input_variable(4)
z = model(feature)

Stosowanie funkcji aktywacji

Istnieje wiele funkcji aktywacji do wyboru, a wybór odpowiedniej funkcji aktywacji z pewnością wpłynie na to, jak dobrze będzie działał nasz model głębokiego uczenia.

Na warstwie wyjściowej

Wybór activation funkcja w warstwie wyjściowej będzie zależeć od rodzaju problemu, który zamierzamy rozwiązać za pomocą naszego modelu.

  • W przypadku problemu regresji powinniśmy użyć linear activation function na warstwie wyjściowej.

  • W przypadku problemu z klasyfikacją binarną powinniśmy użyć pliku sigmoid activation function na warstwie wyjściowej.

  • W przypadku problemu z klasyfikacją wieloklasową powinniśmy użyć softmax activation function na warstwie wyjściowej.

  • Tutaj zbudujemy model do przewidywania jednej z trzech klas. Oznacza to, że musimy użyćsoftmax activation function w warstwie wyjściowej.

Na ukrytej warstwie

Wybór activation funkcja w warstwie ukrytej wymaga pewnych eksperymentów w celu monitorowania wydajności, aby zobaczyć, która funkcja aktywacji działa dobrze.

  • W przypadku problemu klasyfikacyjnego musimy przewidzieć prawdopodobieństwo, że próbka należy do określonej klasy. Dlatego potrzebujemyactivation functionto daje nam wartości probabilistyczne. Aby osiągnąć ten cel,sigmoid activation function może nam pomóc.

  • Jednym z głównych problemów związanych z funkcją sigmoidy jest problem znikającego gradientu. Aby przezwyciężyć taki problem, możemy skorzystaćReLU activation function który ukrywa wszystkie wartości ujemne do zera i działa jako filtr przechodzący dla wartości dodatnich.

Wybór funkcji straty

Kiedy już mamy strukturę naszego modelu NN, musimy ją zoptymalizować. Do optymalizacji potrzebujemy plikuloss function. w odróżnieniuactivation functions, mamy do wyboru bardzo mniej funkcji strat. Jednak wybór funkcji straty będzie zależał od rodzaju problemu, który zamierzamy rozwiązać za pomocą naszego modelu.

Na przykład w przypadku problemu klasyfikacji powinniśmy użyć funkcji straty, która może zmierzyć różnicę między przewidywaną klasą a klasą rzeczywistą.

funkcja straty

W przypadku problemu klasyfikacji rozwiążemy za pomocą naszego modelu NN, categorical cross entropyfunkcja straty jest najlepszym kandydatem. W CNTK jest zaimplementowany jakocross_entropy_with_softmax z których można importować cntk.losses pakiet w następujący sposób -

label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)

Metryka

Mając strukturę naszego modelu NN i funkcję straty do zastosowania, mamy wszystkie składniki, aby rozpocząć tworzenie przepisu na optymalizację naszego modelu uczenia głębokiego. Zanim jednak zagłębimy się w tę kwestię, powinniśmy poznać metryki.

cntk.metrics

CNTK ma pakiet o nazwie cntk.metricsz którego możemy zaimportować metryki, których będziemy używać. Podczas budowania modelu klasyfikacji będziemy używaćclassification_error matric, który wygeneruje liczbę z przedziału od 0 do 1. Liczba od 0 do 1 wskazuje procent poprawnie przewidywanych próbek -

Najpierw musimy zaimportować metrykę z cntk.metrics pakiet -

from cntk.metrics import classification_error
error_rate = classification_error(z, label)

Powyższa funkcja w rzeczywistości wymaga danych wyjściowych NN i oczekiwanej etykiety jako danych wejściowych.