Tworzenie modelu uczenia głębokiego

Nasz model sieci neuronowej będzie składał się z liniowego stosu warstw. Aby zdefiniować taki model, nazywamySequential funkcja -

model = Sequential()

Warstwa wejściowa

Warstwę wejściową, która jest pierwszą warstwą w naszej sieci, definiujemy za pomocą następującej instrukcji programu -

model.add(Dense(512, input_shape=(784,)))

Tworzy to warstwę z 512 węzłami (neuronami) z 784 węzłami wejściowymi. Przedstawiono to na poniższym rysunku -

Zauważ, że wszystkie węzły wejściowe są w pełni połączone z warstwą 1, to znaczy każdy węzeł wejściowy jest połączony ze wszystkimi 512 węzłami warstwy 1.

Następnie musimy dodać funkcję aktywacji dla wyjścia warstwy 1. Użyjemy ReLU jako naszej aktywacji. Funkcję aktywacji dodaje się za pomocą następującej instrukcji programu -

model.add(Activation('relu'))

Następnie dodajemy porzucenie 20%, korzystając z poniższego oświadczenia. Dropout to technika używana do zapobiegania nadmiernemu dopasowaniu modelu.

model.add(Dropout(0.2))

W tym momencie nasza warstwa wejściowa jest w pełni zdefiniowana. Następnie dodamy ukrytą warstwę.

Ukryta warstwa

Nasza ukryta warstwa będzie składać się z 512 węzłów. Dane wejściowe do warstwy ukrytej pochodzą z naszej wcześniej zdefiniowanej warstwy wejściowej. Wszystkie węzły są w pełni połączone, jak we wcześniejszym przypadku. Wyjście warstwy ukrytej przejdzie do następnej warstwy w sieci, która będzie naszą ostatnią i wyjściową warstwą. Użyjemy tej samej aktywacji ReLU, co w przypadku poprzedniej warstwy i spadku o 20%. Kod dodawania tej warstwy znajduje się tutaj -

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))

Sieć na tym etapie można wizualizować w następujący sposób -

Następnie dodamy ostatnią warstwę do naszej sieci, czyli warstwę wyjściową. Pamiętaj, że możesz dodać dowolną liczbę ukrytych warstw, używając kodu podobnego do tego, którego użyłeś tutaj. Dodanie większej liczby warstw uczyniłoby sieć skomplikowaną pod względem szkolenia; jednak dające zdecydowaną przewagę lepszych wyników w wielu przypadkach, choć nie we wszystkich.

Warstwa wyjściowa

Warstwa wyjściowa składa się z zaledwie 10 węzłów, ponieważ chcemy sklasyfikować dane obrazy za pomocą 10 różnych cyfr. Dodajemy tę warstwę, używając następującego oświadczenia -

model.add(Dense(10))

Ponieważ chcemy podzielić wyjście na 10 różnych jednostek, używamy aktywacji softmax. W przypadku ReLU wyjście jest binarne. Dodajemy aktywację za pomocą następującego oświadczenia -

model.add(Activation('softmax'))

W tym momencie naszą sieć można wizualizować, jak pokazano na poniższym schemacie -

W tym momencie nasz model sieci jest w pełni zdefiniowany w oprogramowaniu. Uruchom komórkę kodu i jeśli nie ma błędów, na ekranie pojawi się komunikat potwierdzający, jak pokazano na zrzucie ekranu poniżej -

Następnie musimy skompilować model.