Co to jest Keras? Wyjaśnienie API głębokiej sieci neuronowej

Podczas gdy głębokie sieci neuronowe są w modzie, złożoność głównych frameworków była przeszkodą w ich użyciu przez programistów, którzy nie mają doświadczenia w uczeniu maszynowym. Pojawiło się kilka propozycji ulepszonych i uproszczonych interfejsów API wysokiego poziomu do budowania modeli sieci neuronowych, z których wszystkie wyglądają podobnie z daleka, ale po dokładniejszym zbadaniu wykazują różnice.

Keras to jeden z wiodących interfejsów API sieci neuronowych wysokiego poziomu. Jest napisany w Pythonie i obsługuje wiele silników obliczeniowych sieci neuronowych zaplecza.

Keras i TensorFlow

Biorąc pod uwagę, że projekt TensorFlow przyjęła Keras jako API wysokiego poziomu dla nadchodzącego TensorFlow wydania 2.0, Keras spojrzenia być zwycięzcą, jeśli niekoniecznie zwycięzcą. W tym artykule omówimy zasady i implementację Keras, aby zrozumieć, dlaczego jest to ulepszenie w stosunku do niskopoziomowych interfejsów API uczenia głębokiego.

Nawet w TensorFlow 1.12 oficjalny samouczek Pierwsze kroki z TensorFlow wykorzystuje wysokopoziomowy interfejs API Keras osadzony w TensorFlow, tf.keras . Z kolei interfejs API TensorFlow Core wymaga pracy z wykresami obliczeniowymi, tensorami, operacjami i sesjami TensorFlow, z których niektóre mogą być trudne do zrozumienia, gdy dopiero zaczynasz pracę z TensorFlow. Istnieją pewne zalety korzystania z niskopoziomowego interfejsu API TensorFlow Core, głównie podczas debugowania, ale na szczęście w razie potrzeby można mieszać interfejsy API TensorFlow wysokiego i niskiego poziomu.

Zasady Keras

Keras został stworzony, aby był przyjazny dla użytkownika, modułowy, łatwy w rozbudowie i do pracy z Pythonem. Interfejs API został „zaprojektowany dla ludzi, a nie maszyn” i „jest zgodny z najlepszymi praktykami w zakresie zmniejszania obciążenia poznawczego”.

Warstwy neuronowe, funkcje kosztów, optymalizatory, schematy inicjalizacji, funkcje aktywacji i schematy regularyzacji to samodzielne moduły, które można łączyć w celu tworzenia nowych modeli. Nowe moduły są łatwe do dodania, jako nowe klasy i funkcje. Modele są definiowane w kodzie Pythona, a nie w oddzielnych plikach konfiguracyjnych modelu.

Dlaczego Keras?

Największe powody, dla których warto używać Keras, wynikają z jego głównych zasad, przede wszystkim z tego, że jest przyjazny dla użytkownika. Oprócz łatwości uczenia się i budowania modeli, Keras oferuje korzyści wynikające z szerokiego zastosowania, wsparcia dla szerokiej gamy opcji wdrażania produkcji, integracji z co najmniej pięcioma silnikami zaplecza (TensorFlow, CNTK, Theano, MXNet i PlaidML), oraz silne wsparcie dla wielu procesorów graficznych i rozproszonych szkoleń. Ponadto Keras jest wspierany przez Google, Microsoft, Amazon, Apple, Nvidia, Uber i inne.

Kończy się tył Keras

Właściwy Keras nie wykonuje własnych operacji niskiego poziomu, takich jak produkty tensorowe i zwoje; w tym celu opiera się na silniku zaplecza. Mimo że Keras obsługuje wiele silników zaplecza, jego głównym (i domyślnym) zapleczem jest TensorFlow, a jego głównym dostawcą jest Google. Interfejs API Keras jest dostępny w pakiecie TensorFlow as tf.keras, który, jak wspomniano wcześniej, stanie się podstawowym interfejsem API TensorFlow od wersji TensorFlow 2.0.

Aby zmienić zaplecze, po prostu edytuj $HOME/.keras/keras.jsonplik i określ inną nazwę zaplecza, na przykład theanolub CNTK. Alternatywnie możesz nadpisać skonfigurowane zaplecze, definiując zmienną środowiskową KERAS_BACKENDw powłoce lub w kodzie Pythona przy użyciu os.environ["KERAS_BACKEND"]właściwości.

Modele Keras

Model jest podstawą Keras struktura danych. W Keras dostępne są dwa główne typy modeli: Sequentialmodel i Modelklasa używana z funkcjonalnym interfejsem API.

Modele sekwencyjne Keras

SequentialModel liniowy stos warstw, a warstwy mogą być opisane w bardzo prosty sposób. Oto przykład z dokumentacji Keras, który używa model.add()do zdefiniowania dwóch gęstych warstw w Sequentialmodelu:

import keras

z keras.models import Sequential

z importu keras.layers Dense

# Utwórz model sekwencyjny z gęstymi warstwami, używając metody add

#Dense realizuje operację:

# wyjście = aktywacja (kropka (wejście, jądro) + odchylenie)

# Jednostki to wymiarowość przestrzeni wyjściowej dla warstwy,

# co równa się liczbie ukrytych jednostek

# Funkcje aktywacji i utraty mogą być określone przez łańcuchy lub klasy

model.add (Gęsty (jednostki = 10, aktywacja = "softmax"))

# Metoda kompilacji konfiguruje proces uczenia się modelu

              optymalizator = "sgd",

              metrics = ['dokładność'])

# Metoda dopasowania polega na treningu w partiach

# x_train i y_train to tablice Numpy - tak jak w API Scikit-Learn.

# Metoda oceny oblicza straty i metryki

# dla wytrenowanego modelu

# Metoda przewidywania stosuje wytrenowany model do danych wejściowych

# do generowania wyników

class = model.predict (x_test, batch_size = 128)

Warto przeczytać komentarze w powyższym kodzie. Warto również zauważyć, jak mało jest okrucieństwa w rzeczywistym kodzie w porównaniu, powiedzmy, z niskopoziomowymi interfejsami API TensorFlow. Każda definicja warstwy wymaga jednej linii kodu, kompilacja (definicja procesu uczenia się) pobiera jedną linię kodu, a dopasowywanie (szkolenie), ocena (obliczanie strat i metryk) oraz przewidywanie wyników z wytrenowanego modelu - każdy pobiera jedną linię kodu .

Funkcjonalny interfejs API Keras

Model Keras Sequential jest prosty, ale ma ograniczoną topologię modelu. Funkcjonalny interfejs API Keras jest przydatny do tworzenia złożonych modeli, takich jak modele z wieloma wejściami / wieloma wyjściami, ukierunkowane wykresy acykliczne (DAG) i modele ze współdzielonymi warstwami.

Funkcjonalny interfejs API wykorzystuje te same warstwy co model sekwencyjny, ale zapewnia większą elastyczność w łączeniu ich. W funkcjonalnym API najpierw definiujesz warstwy, a następnie tworzysz Model, kompilujesz go i dopasowujesz (trenujesz). Ocena i przewidywanie są zasadniczo takie same, jak w modelu sekwencyjnym, dlatego zostały pominięte w przykładowym kodzie poniżej.

z keras.layers import Input, Dense

z keras.models importuj model

# Zwraca tensor

# instancja warstwy jest wywoływana przez tensor i zwraca tensor

x = Gęsty (64, aktywacja = "relu") (x)

prognozy = Gęsty (10, aktywacja = "softmax") (x)

# Spowoduje to utworzenie modelu zawierającego pliki

# warstwa wejściowa i trzy warstwy zwarte

model.compile (optimizer = 'rmsprop',

              loss = "categorical_crossentropy",

              metrics = ['dokładność'])

model.fit (data, labels)  # rozpoczyna trening

Warstwy Keras

W poprzednich przykładach używaliśmy tylko Densewarstw. Keras oferuje szeroki wybór predefiniowanych typów warstw, a także obsługuje tworzenie własnych warstw.

Warstwy podstawowe obejmują Dense(iloczyn skalarny plus odchylenie), Activation(funkcja transferu lub kształt neuronu), Dropout(losowo ustaw ułamek jednostek wejściowych na 0 przy każdej aktualizacji treningowej, aby uniknąć nadmiernego dopasowania), Lambda(zawiń dowolne wyrażenie jako Layerobiekt) i kilka innych . Warstwy splotów (użycie filtru do tworzenia mapy cech) działają od 1D do 3D i obejmują najbardziej typowe warianty, takie jak warstwy kadrowania i transponowane warstwy splotu dla każdego wymiaru. Do rozpoznawania obrazu powszechnie stosuje się splot 2D, który został zainspirowany funkcjonalnością kory wzrokowej.

Warstwy pulowania (skalowania w dół) działają od 1D do 3D i obejmują najpopularniejsze warianty, takie jak maksymalne i średnie łączenie. Warstwy połączone lokalnie działają jak warstwy splotu, z tą różnicą, że wagi są niewspółdzielone. Warstwy okresowe obejmują prostą (w pełni połączoną rekurencję), bramkowaną, LSTM i inne; są one przydatne między innymi do przetwarzania języka. Warstwy hałasu pomagają uniknąć nadmiernego dopasowania.

Zbiory danych Keras

Keras dostarcza siedem typowych przykładowych zestawów danych uczenia głębokiego za pośrednictwem keras.datasetsklasy. Obejmuje to małe kolorowe obrazy cifar10 i cifar100, recenzje filmów IMDB, tematy wiadomości Reuters, odręczne cyfry MNIST, obrazy mody MNIST i ceny mieszkań w Bostonie.

Aplikacje i przykłady Keras

Keras dostarcza również dziesięć dobrze znanych modeli, zwanych Keras Applications, wstępnie przeszkolonych w stosunku do ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. Można ich używać do przewidywania klasyfikacji obrazów, wyodrębniania z nich cech i dostrajania modeli w innym zestawie klas.

Nawiasem mówiąc, dopracowanie istniejących modeli to dobry sposób na przyspieszenie treningu. Na przykład, możesz dodać warstwy, jak chcesz, zamrozić warstwy podstawowe, aby wytrenować nowe warstwy, a następnie odblokować niektóre warstwy podstawowe, aby dostroić trening. Możesz zablokować warstwę za pomocą ustawienia layer.trainable = False.

Repozytorium przykładów Keras zawiera ponad 40 przykładowych modeli. Obejmują modele wizyjne, tekst i sekwencje oraz modele generatywne.

Wdrażanie Keras

Modele Keras można wdrażać na wielu różnych platformach, być może w większym stopniu niż jakiekolwiek inne ramy uczenia głębokiego. Obejmuje to iOS, przez CoreML (obsługiwany przez Apple); Android za pośrednictwem środowiska wykonawczego TensorFlow dla systemu Android; w przeglądarce za pośrednictwem Keras.js i WebDNN; w Google Cloud za pośrednictwem usługi TensorFlow-Serving; w zapleczu aplikacji internetowej Python; na JVM, poprzez import modelu DL4J; i na Raspberry Pi.

Aby rozpocząć pracę z Kerasem, przeczytaj dokumentację, sprawdź repozytorium kodu, zainstaluj TensorFlow (lub inny silnik zaplecza) i Keras oraz wypróbuj samouczek Pierwsze kroki dla modelu Keras Sequential. Stamtąd możesz przejść do innych samouczków i ostatecznie zapoznać się z przykładami Keras.