Jak wizualizować architektury sieci neuronowych w Pythonie?

Krótki przewodnik po tworzeniu schematycznej reprezentacji sieci neuronowych za pomocą Jupyter lub Google Colab

Image Credit — Opracowany przez autora przy użyciu visualkeras i Jupyter Notebook.

Często podczas pracy ze sztucznymi sieciami neuronowymi lub innymi odmianami, takimi jak konwolucyjne sieci neuronowe lub powtarzające się sieci neuronowe, chcemy zwizualizować i stworzyć schematyczną reprezentację naszego skompilowanego modelu. Może to rozwiązać dwa cele:

  1. Definiowanie i trenowanie wielu modeli pozwala nam wizualizować głębokość naszego modelu i porównywać różne warstwy oraz sposób ich sekwencyjnego układania.
  2. Pozwala lepiej zrozumieć strukturę modelu, funkcje aktywacji używane w każdej warstwie, kształt każdej warstwy (liczbę neuronów) oraz parametry, które należy wytrenować

Istnieje kilka łatwo dostępnych pakietów w Pythonie, które mogą tworzyć wizualną reprezentację naszych modeli sieci neuronowych. Pierwsze trzy pakiety mogą być używane nawet przed nauczeniem modelu (tylko model musi być zdefiniowany i skompilowany); jednak Tensor Boards wymaga od użytkownika wytrenowania modelu na dokładnych danych, zanim będzie można wizualizować architekturę.

  1. Wizualizator SSN
  2. Wizualne Kery
  3. Wykres modelu Kerasa
  4. Płyta tensorowa
pip instaluje elementy wizualnepip zainstaluj ann_visualizerpip zainstaluj graphviz

Nie musimy oddzielnie instalować „Tensor Board” i „Keras Model Plot”. Nastąpi to wraz z pierwszą instalacją Tensorflow & Keras.

Możemy korzystać tylko z kilku bibliotek wymienionych poniżej. Większość bibliotek może przekonwertować model TensorFlow na diagram bez jawnego trenowania go na danych. Możesz to uznać za pojedyncze źródło prawdy. Niektóre biblioteki, takie jak Pandas, Skimage i OpenCV, przydadzą się podczas czytania ustrukturyzowanych danych lub obrazów.

# Importuj niezbędne bibliotekiimportuj pandy jako pdimport numpy jako np # Importuj numpyfrom skimage import danych, io # Importuj bibliotekę skimage (data - Obrazy testowe i przykładowe dane.# io — odczytywanie, zapisywanie i wyświetlanie obrazów.)z skimage.color zaimportuj rgb2grayimport matplotlib.pyplot as plt # Import matplotlib.pyplot (Struktura drukowania w Pythonie).%matplotlib wbudowanyimport os # Ten moduł zapewnia przenośny sposób korzystania z funkcji zależnych od systemu operacyjnego.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'ostrzeżenia o imporcie# Tłumić ostrzeżeniawarnings.filterwarnings('ignore')z wyświetlacza importu IPython.displayimportuj cv2 jako cv
z sklearn.metrics zaimportuj macierz_zmieszania
ze sklearn.model_selection importuj train_test_splitz narzędzi importujących tensorflow.kerasz tensorflow.keras.models zaimportuj Sequential,load_modelz tensorflow.keras.layers importuj Gęstość, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationz tensorflow.keras.optimizers importuj Adamimportuj tensorflow jako tfimportuj seaborn jako sns

Kilka przydatnych linków do odkrywania od podstaw większej ilości treści na temat SSN i ​​CNN.

Będziemy definiować trzy różne modele CNN z różnymi hiperparametrami. Idealnie, w prawdziwym świecie, dążymy do wdrożenia różnych architektur, aby zmaksymalizować dokładność lub wszelkie istotne metryki, biorąc pod uwagę, że budujemy model dla zadania klasyfikacji obejmującej wiele kategorii. Nasz wybór typu problemu nie będzie miał wpływu na sposób wykorzystania pakietów wizualizacyjnych.

Stworzyliśmy funkcje zdefiniowane przez użytkownika, aby zbudować trzy różne modele oddzielnie z różną liczbą warstw CNN, max-pooling i gęstymi warstwami.

4.1 – Architektura 1 — Płytkie warstwy CNN + warstwy ANN

zdecydowanie model_konstrukcji ():model = sekwencyjny()model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), aktywacja='relu'))model.add(Conv2D(filters=64, kernel_size=(3, 3), aktywacja='relu'))model.add(MaxPool2D((2, 2)))model.add(spłaszcz())model.add(Gęsty(256, aktywacja='relu'))model.add(Gęsty(12, aktywacja='softmax'))model.compile(loss='categorical_crossentropy', Optimizer='adam', metrics=['dokładność'])return model

4.2 — Architektura 2 — głębokie warstwy CNN + płytkie warstwy ANN

def sconstruct_model():smodel = Sekwencyjny()smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), aktywacja='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), aktywacja='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), aktywacja='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), aktywacja='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), aktywacja='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), aktywacja='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(spłaszcz())smodel.add(Gęsty(256, aktywacja='relu'))smodel.add(Gęsty(12, aktywacja='softmax'))#optymalizator = Adam(lr=0.001)smodel.compile(loss='categorical_crossentropy', Optimizer='adam', metrics=['dokładność'])#model.podsumowanie()model zwrotny

4.3 — Architektura 3 — Głębokie warstwy CNN i ANN

def cconstruct_model(learningRate):smodel = Sekwencyjny()smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), aktywacja='relu'))smodel.add(Conv2D(filters=32, kernel_size=(3, 3), aktywacja='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), aktywacja='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), aktywacja='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), aktywacja='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), aktywacja='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(spłaszcz())smodel.add(Gęsty(256, aktywacja='relu'))smodel.add(Gęsty(256, aktywacja='relu'))smodel.add(Gęsty(12, aktywacja='softmax'))optymalizator = Adam(lr=szybkość uczenia)smodel.compile(loss='categorical_crossentropy', optymalizator=optymalizator, metryki=['dokładność'])model.podsumowanie()model zwrotnymodel=cconstruct_model(0.001)

Moduł Pythona o nazwie ANN Visualizer umożliwia wizualizację sztucznej sieci neuronowej za pomocą kilku linii kodu (Gheorghiu, 2022). Wykorzystuje Keras i moduł Graphviz Pythona do tworzenia uporządkowanego i atrakcyjnego wykresu sieci neuronowej. Masz swobodę wizualizacji całej sieci głębokiego uczenia się lub tylko konwolucyjnej sieci neuronowej, którą stworzyłeś dzięki postępom w głębokim uczeniu się (Shah, 2018).

Skorzystaj z poniższej struktury, aby wygenerować reprezentację pdf swojej sieci neuronowej. Jednak wcześniej musimy skompilować powyższe modele.

model=konstrukcja_model()

ann_viz(model, view=True, filename=”network.gv”, title=”Moja sieć neuronowa”)

  • Model - Model sekwencyjny z Keras
  • pogląd - Zwizualizuj wykres po wywołaniu metody ann_viz().
  • Nazwa pliku - Nazwa pliku
  • tytuł - Dowolny konkretny tytuł oznaczający wykres
z ann_visualizer.visualize zaimportuj ann_vizann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — Model 1 — Prosta architektura”)
Rysunek 1: Migawka funkcjistruct_model() utworzonej za pomocą narzędzia ANN Visualizer. Źródło — Obraz opracowany przez autora przy użyciu Jupyter Notebook. oryginalny wynik jest zbyt duży, aby zmieścić się tutaj jako obraz, dlatego użyto tutaj migawki dolnych warstw.

Narzędzie Pythona o nazwie Visualkeras ułatwia przeglądanie projektów sieci neuronowych Keras (oddzielnie lub jako część TensorFlow). Większość potrzeb stylizacyjnych można z łatwością zaspokoić. Konwolucyjne sieci neuronowe (CNN) czerpią znaczne korzyści z tworzenia warstwowych architektur. Większość modeli, w tym proste sieci typu feed-forward, czerpie znaczne korzyści z generowania architektury grafowej, którą obsługuje ten moduł (Gavrikov, 2022).

model1=konstrukcja_model()model2=sconstruct_model()model3=cconstruct_model(0.009)importować visualkeryz PIL zaimportuj ImageFontvisualkeras.layered_view(model1, legenda=True)visualkeras.layered_view(model2, legenda=True)visualkeras.layered_view(model3, legenda=True)
Rysunek 2. Ilustruje schematyczną reprezentację trzech różnych architektur modeli. Źródło — Obraz opracowany przez autora przy użyciu Jupyter Notebook.

Połączenia keras.utils.plot_model zapewnia wbudowane funkcje do kreślenia modelu zdefiniowanego i skompilowanego przez Keras przy użyciu pakietów Graphviz i pydot. Graficznie jest mniej intuicyjny niż pakiety użyte powyżej, ale zarysowuje podstawową architekturę modelu sekwencyjnego (Team, nd).

tf.keras.utils.plot_model(model1,to_file="model.png",show_shapes=Prawda,show_dtype=Fałsz,show_layer_names=Prawda,katalog_rank="TB",expand_nested=Prawda,dpi=96,layer_range=Brak,show_layer_activations=Prawda,)

Kilka hiperparametrów do rozważenia:

  1. Model: Instancja skompilowanego modelu lub obiektu modelu Keras
  2. do pliku: Nazwa pliku obrazu
  3. pokaż kształty: wyświetl wymiar i kształt każdej warstwy w sieci neuronowej
  4. show_layer_activation: wyświetlić funkcje aktywacji używane w neuronach
Rysunek 3. Ilustruje dane wyjściowe tf.keras.utils.plot_model(). Źródło — Obraz opracowany przez autora przy użyciu Jupyter Notebook.

TensorBoard to interfejs deski rozdzielczej, który umożliwia użytkownikom wizualizację dzienników w różnych modelach. Dzienniki mogą obejmować śledzenie dowolnych miar walidacji modelu, takich jak dokładność, powtarzalność, RMSE, MAPE i MSE w różnych epokach, po tworzenie koncepcyjnego wykresu architektury modelu. Jest to potężne narzędzie do wizualizacji, czy zamierzony model pasuje do oczekiwanego projektu, jednocześnie dostarczając wgląd w to, jak model można zmienić za pomocą wykresu na poziomie operacyjnym.

Aby skorzystać z tej funkcjonalności, musimy najpierw załadować TensorBoard, a następnie utworzyć katalog dziennika.

Tablica tensorowa %load_extz importu daty i godzinyz importu tensorflow keras# Zdefiniuj wywołanie zwrotne Keras TensorBoard.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

Utwórz wywołanie zwrotne Keras TensorBoard i określ katalog dziennika przed uczeniem. Możesz zapewnić rejestrowanie danych wykresu na potrzeby wizualizacji TensorBoard, przekazując to wywołanie zwrotne do modelu.fit(). Po wywołaniu TensorBoard ładowanie może zająć kilka minut.

model.dopasowanie(X2_pociąg, Y2_pociąg,wielkość_partia=64,epoki=5,callbacks=[tensorboard_callback])

Uwaga: X2_train i Y2_train to zestawy danych szkoleniowych, które nie są odzwierciedlone w powyższych kodach. Możesz to zastąpić dowolnymi własnymi danymi treningowymi.

TensorBoard domyślnie zawsze pokazuje wykres poziomu operacji. (Znacznik „Default” jest podświetlony po lewej stronie). Wykres jest odwrócony w porównaniu z kodem, ponieważ dane przepływają od dołu do góry. Ale jak widać, wykres z grubsza przypomina opis modelu Keras, z dodatkowymi krawędziami prowadzącymi do innych węzłów obliczeniowych (Tensorflow, 2022).

Rysunek 4. Ilustruje dane wyjściowe TensorBoard. Źródło — Obraz opracowany przez autora przy użyciu Jupyter Notebook.

Więcej kontekstu dotyczącego korzystania z TensorBoard można znaleźć w sekcji Informacje.

Z komercyjnego punktu widzenia, gdy użytkownik musi przedstawić swoją analizę grupie interesariuszy, diagramy te zwiększają złożoność dyskusji. Mogą nie być ekstremalną wartością dodaną. Jednak z perspektywy akademickiej i edukacyjnej warto wykorzystać te pakiety do wyświetlenia tych architektur głębokiego uczenia się. Wizualizator ANN, moim zdaniem, wyróżnia się na tle innych, ponieważ łatwo jest przetrawić diagram, podczas gdy dane wyjściowe wykresu TensorBoard wymagają więcej szczegółów technicznych, zanim wyniki będą mogły zostać skonsumowane.

Gavrikov, P. (2022, 13 kwietnia). visualkeras dla Keras / TensorFlow. GitHub. https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022, 21 października). Wizualizator SSN. GitHub. https://github.com/RedaOps/ann-visualizer

Shah, A. (2018, 28 kwietnia). Wizualizacja sztucznych sieci neuronowych (ANN) za pomocą tylko jednego wiersza kodu. Średni. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

Przepełnienie stosu. (nd). uczenie maszynowe — jak wizualizujecie architektury sieci neuronowych? Wymiana stosu nauki o danych. Pobrano 29 października 2022 r. Z https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

Zespół, K. (nd). Dokumentacja Keras: narzędzia do kreślenia modeli. Keras.io. Pobrano 29 października 2022 r. Z https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

Tensorflow. (2022, 6 stycznia). Badanie wykresu TensorFlow | TensorBoard. TensorFlow. https://www.tensorflow.org/tensorboard/graphs

Jak wizualizować architektury sieci neuronowych w języku Python ponownie opublikowane ze źródła w kierunkudatascience.com/feed

<!–

->

Znak czasu:

Więcej z Konsultanci Blockchain