Głębokie uczenie z Keras: Trening sieci neuronowej z Keras [z kodem]
Opublikowany: 2020-12-24Keras to biblioteka Pythona, która zapewnia API do pracy z sieciami neuronowymi i frameworkami Deep Learning. Keras dostarcza funkcje i moduły, które są niezwykle przydatne w pracy z różnymi aplikacjami Deep Learning w Pythonie.
Pod koniec tego samouczka będziesz mieć wiedzę na temat następujących rzeczy:
- Co to jest Keras?
- Keras API
- Trening sieci neuronowej w Keras
Spis treści
Co to jest Keras?
Aby przeprowadzić głębokie uczenie, najczęściej używaną biblioteką wcześniej był Tensorflow 1.x, z którym trudno było sobie poradzić początkującym. Stworzenie podstawowej sieci jednowarstwowej wymagało dużo kodowania. Jednak dzięki Kerasowi cały proces tworzenia struktury sieci neuronowej, a następnie jej trenowania i śledzenia stał się niezwykle łatwy.
Keras to wysokopoziomowe API, które może działać na backendzie Tensorflow, Theano i CNTK. Daje nam możliwość prowadzenia eksperymentów z wykorzystaniem sieci neuronowych z wykorzystaniem wysokopoziomowego i przyjaznego dla użytkownika API. Może również działać na procesorach i kartach graficznych.
Keras API
Keras posiada 10 różnych modułów API przeznaczonych do obsługi modelowania i uczenia sieci neuronowych. Przyjrzyjmy się każdemu z nich, aby zrozumieć, co oferuje Keras.
Modele
Models API zapewnia funkcjonalność budowania złożonych sieci neuronowych poprzez dodawanie/usuwanie warstw. Model może być sekwencyjny, co oznacza, że warstwy będą ułożone sekwencyjnie z jednym wejściem i wyjściem. Model może być również funkcjonalny, co oznacza, że posiada w pełni konfigurowalne modele. To jest używane głównie w przemyśle.

Interfejs API zawiera również moduł szkoleniowy, który zapewnia metody kompilacji modelu wraz z optymalizatorem i funkcją straty, metodę dopasowania modelu, metodę oceny i przewidywania nowych danych. Co więcej, posiada również metody uczenia, testowania i przewidywania na danych wsadowych. Models API umożliwia również zapisywanie i serializację modeli.
Warstwy
Warstwy to elementy składowe każdej sieci neuronowej. Interfejs API warstw oferuje kompletny zestaw metod budowania architektury sieci neuronowej. Interfejs API warstw ma klasę warstwy podstawowej, która zawiera metody potrzebne do tworzenia niestandardowych warstw z niestandardowymi wagami i inicjatorami.
Zawiera klasę Layer Activations, która składa się z różnych funkcji aktywacji, takich jak ReLU, Sigmoid, Tanh, Softmax itp. Klasa Layer Weight Initializers oferuje metody inicjowania wag na różne sposoby.
Składa się również z klasy Core Layers, która składa się z klas wymaganych do dodawania warstw podstawowych, takich jak Warstwa gęsta, Warstwa aktywacji, Warstwa osadzania itp. Klasa Warstwa splotu oferuje różne metody dodawania różnych typów warstw splotu. Klasa Pooling Layers zawiera metody wymagane dla różnych typów poolingu, takich jak Max Pooling, Average Pooling, Global Max Pooling i Global Average Pooling.
Oddzwonienia
Wywołania zwrotne to sposób na śledzenie procesu uczenia modelu. Po włączeniu funkcji wywołania zwrotnego różne akcje mogą być wykonywane przed lub po zakończeniu epoki lub partii. Dzięki wywołaniom zwrotnym możesz:
- Monitoruj metryki treningu, rejestrując metryki na tablicy TensorFlow
- Okresowe zapisywanie modelu na dysku
- Wczesne zatrzymanie w przypadku, gdy strata nie zmniejsza się znacząco po pewnych epokach
- Zobacz wewnętrzne stany i statystyki modelu podczas treningu
Wstępne przetwarzanie zbioru danych
Dane są zwykle w formacie surowym i znajdują się w uporządkowanych katalogach i muszą być wstępnie przetworzone przed przesłaniem do modelu w celu dopasowania. Klasa Image Data Preprocessing posiada wiele takich dedykowanych funkcji. Na przykład dane obrazu muszą znajdować się w tablicy numerycznej, dla której możemy użyć funkcji img_to_array. Lub jeśli obrazy znajdują się w katalogu i podfolderach, możemy użyć funkcji image_dataset_from_directory.
Data Preprocessing API zawiera również klasy dla danych szeregów czasowych i danych tekstowych.
Optymalizatory
Optymalizatory są podstawą każdej sieci neuronowej. Każda sieć neuronowa pracuje nad optymalizacją funkcji straty, aby znaleźć najlepsze wagi do prognozowania. Istnieje wiele rodzajów optymalizatorów, które stosują nieco inne techniki w celu znalezienia optymalnych wag. Wszystkie te optymalizatory są dostępne w API Optimizers – SGD, RMSProp, Adam, Adadelta, Adagrad, Adamax, Nadal, FTRL.
Straty
Podczas kompilowania modelu należy określić funkcje strat. Ta funkcja straty zostałaby zoptymalizowana przez optymalizator, który został również przekazany jako parametr w metodzie kompilacji. Trzy główne klasy strat to: straty probabilistyczne, straty regresyjne, straty na zawiasach.
Metryka
Metryki są używane w każdym modelu ML do ilościowego określenia jego wydajności na danych testowych. Metryki są podobne do funkcji strat, z wyjątkiem tego, że są używane w danych testowych. Dostępnych jest wiele metryk Dokładności, takich jak Dokładność, Dokładność binarna, Dokładność kategoryczna itp. Zawiera również metryki probabilistyczne, takie jak Binarna entropia krzyżowa, kategoryczna entropia krzyżowa itp. Precyzja, przypomnienie itp.
Oprócz tych metryk klasyfikacyjnych, ma również metryki regresji, takie jak błąd średniokwadratowy, błąd średni kwadratowy, średni błąd bezwzględny itp.
Przeczytaj także: Co to jest Keras i TensorFlow
Aplikacje Keras
Klasa Keras Applications składa się z kilku gotowych modeli wraz ze wstępnie wytrenowanymi wagami. Te wstępnie wytrenowane modele są wykorzystywane w procesie Transfer Learning. Te wstępnie wytrenowane modele różnią się w zależności od architektury, liczby warstw, możliwych do trenowania wag itp. Niektóre z nich to Xception, VGG16, Resnet50, MobileNet itp.

Trening sieci neuronowej z Keras
Rozważmy prosty zestaw danych, taki jak MNIST, który jest dostępny w klasie zestawów danych Keras. Stworzymy prostą, sekwencyjną, splotową sieć neuronową do klasyfikowania odręcznych obrazów cyfr 0-9.
#Ładowanie zbioru danych z keras.datasets importuj mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() |
Normalizacja zbioru danych poprzez podzielenie każdego piksela przez 255. Ponadto konieczne jest przekształcenie obrazów w 4 wymiary przed przesłaniem ich do modelu CNN.
x_train = x_train.astype( 'float32' ) x_test = x_test.astype( 'float32' ) x_train /= 255 x_test /= 255 x_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 ) x_test = X_test.reshape(X_test.shape[ 0 ], 28 , 28 , 1 ) |
Musimy oznaczyć kodowanie klas przed przesłaniem ich do modelu. Zrobimy to za pomocą klasy Keras' Utils.
z importu keras.utils do_categorical
|
Teraz możemy rozpocząć tworzenie modelu za pomocą Sequential API.
z keras.models import Sequential z keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), aktywacja= 'relu' , input_shape=x_train.shape[ 1 :])) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add(Rezygnacja(wskaźnik= 0,25 )) model.add(Conv2D(filtry= 64 , kernel_size=( 3 , 3 ), aktywacja= 'relu' )) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add(Rezygnacja(wskaźnik= 0,25 )) model.add(Flatten()) model.add(Dense( 256 , aktywacja= 'relu' )) model.add(Rezygnacja(wskaźnik= 0,5 )) model.add(Dense( 10 , aktywacja= 'softmax' )) |
W powyższym kodzie deklarujemy model sekwencyjny, a następnie dodajemy do niego wiele warstw. Warstwa konwolucyjna, a następnie warstwa Max Pooling, a następnie warstwa dropout do regularyzacji. Później spłaszczamy dane wyjściowe za pomocą spłaszczonej warstwy, a ostatnia warstwa jest w pełni połączoną gęstą warstwą z 10 węzłami.
Następnie musimy go skompilować, przekazując funkcję straty, optymalizator i metrykę.
model.kompilacja( strata= 'categorical_crossentropy' , optymalizator= 'adam' , metryki=[ 'dokładność' ] ) |
Teraz musielibyśmy dodać rozszerzone obrazy z oryginalnych obrazów, aby zwiększyć zestaw uczący i dokładność modelu. Zrobimy to za pomocą funkcji ImageDataGenerator.
z keras.preprocessing.image import ImageDataGenerator generator danych = GeneratorDanych Obrazów ( zakres_rotacji= 10 , zakres_powiększenia= 0,1 , zakres_przesunięć_szerokości= 0,1 , zakres_przesunięcia_wysokości= 0,1 ) |
Teraz, gdy model jest skompilowany, a obrazy rozszerzone, możemy rozpocząć proces uczenia. Ponieważ użyliśmy powyżej Generatora danych obrazu, użyjemy metody fit_generator, a nie tylko dopasowanie.

epoki = 3 wielkość_partia = 32 historia = model.fit_generator( datagen.flow(x_train, y_train, batch_size=batch_size), epoki=epoki, validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[ 0 ]//batch_size ) |
Wynik procesu uczenia jest następujący:
3Teraz model jest trenowany i można go ocenić, uruchamiając go na niewidocznych danych testowych.
Przeczytaj pokrewne: Głębokie uczenie i sieci neuronowe z Keras
Zanim pójdziesz
W tym samouczku zobaczyliśmy, jak dobrze Keras jest zbudowany i jak łatwo jest zbudować złożoną sieć neuronową. Keras jest teraz objęty Tensorflow 2.x, co daje mu jeszcze więcej funkcji. Wypróbuj więcej takich przykładów i poznaj funkcje i cechy Keras.
Jeśli chcesz dowiedzieć się więcej o uczeniu maszynowym, sprawdź dyplom PG IIIT-B i upGrad w uczeniu maszynowym i sztucznej inteligencji, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 450 godzin rygorystycznego szkolenia, ponad 30 studiów przypadków i zadań, IIIT- Status absolwenta B, ponad 5 praktycznych, praktycznych projektów zwieńczenia i pomoc w pracy z najlepszymi firmami.