Hur man visualiserar neurala nätverksarkitekturer i Python

En snabbguide för att skapa en schematisk representation av dina neurala nätverk med Jupyter eller Google Colab

Bildkredit — Utvecklad av författaren med hjälp av visualkeras och Jupyter Notebook.

När vi arbetar med artificiella neurala nätverk eller andra varianter som Convolution Neural Networks eller Recurrent Neural Networks vill vi ofta visualisera och skapa en schematisk representation av vår kompilerade modell. Detta kan lösa två syften:

  1. Samtidigt som vi definierar och tränar flera modeller kan vi visualisera djupet av vår modell och jämföra olika lager och hur de läggs ner i följd.
  2. Tillåter bättre förståelse av modellstrukturen, aktiveringsfunktioner som används i varje lager, formen på varje lager (antal neuroner) och parametrar som behöver tränas

Det finns några paket lätt tillgängliga i python som kan skapa en visuell representation av våra neurala nätverksmodeller. De tre första paketen kan användas redan innan en modell tränas (modellen behöver bara definieras och kompileras); Tensor Boards kräver dock att användaren tränar modellen på korrekt data innan arkitekturen kan visualiseras.

  1. ANN Visualizer
  2. Visual Keras
  3. Keras modellplan
  4. Tensor Board
pip installera visualkeraspip installera ann_visualizerpip installera graphviz

Vi behöver inte installera "Tensor Board" och "Keras Model Plot" separat. Detta kommer med den första installationen av Tensorflow & Keras.

Vi kanske bara använder ett fåtal av biblioteken som listas nedan. De flesta bibliotek kan konvertera en TensorFlow-modell till ett diagram utan att explicit träna den på data. Du kan betrakta detta som en enda källa till sanning. Vissa bibliotek, som Pandas, Skimage och OpenCV, kommer väl till pass när man läser strukturerad data eller bilder.

# Importera nödvändiga bibliotekimportera pandor som pdimportera numpy som np # Importera numpyfrån skimage importera data, io # Importera skimage bibliotek (data - Testbilder och exempeldata.# io - Läsa, spara och visa bilder.)från skimage.color import rgb2grayimportera matplotlib.pyplot som plt # Importera matplotlib.pyplot (plottningsramverk i Python.)%matplotlib inlineimport os # Denna modul tillhandahåller ett bärbart sätt att använda operativsystemberoende funktionalitet.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'importera varningar# Dämpa varningarwarnings.filterwarnings('ignore')från IPython.display importskärmimportera cv2 som cv
från sklearn.metrics import confusion_matrix
från sklearn.model_selection importera train_test_splitfrån tensorflow.keras import utilsfrån tensorflow.keras.models import Sequential,load_modelfrån tensorflow.keras.layers importera Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationfrån tensorflow.keras.optimizers importera Adamimportera tensorflöde som tfimportera sjöfödda som sns

Några användbara länkar för att utforska mer innehåll kring ANN och CNN från grunden.

Vi kommer att definiera tre olika CNN-modeller med olika hyperparametrar. Helst, i den verkliga världen, strävar vi efter att implementera olika arkitekturer för att maximera noggrannheten eller alla relevanta mått, med tanke på att vi bygger modellen för en klassificeringsuppgift i flera kategorier. Vårt val av problemtyp kommer inte att ha någon inverkan på hur visualiseringspaketen ska användas.

Vi skapade användardefinierade funktioner för att bygga tre olika modeller separat med olika antal CNN-lager, maxpooling och täta lager.

4.1 – Arkitektur 1 – Grunda CNN-lager + ANN-lager

def construct_model():modell = Sequential()model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), activation='relu'))model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))model.add(MaxPool2D((2, 2)))model.add (Platta ())model.add(Dense(256, activation='relu'))model.add(Dense(12, activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['precision'])returmodell

4.2 — Arkitektur 2 — Djupa CNN + Grunda ANN-lager

def sconstruct_model():smodel = Sequential()smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), activation='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Flatten())smodel.add(Dense(256, activation='relu'))smodel.add(Dense(12, activation='softmax'))#optimizer = Adam(lr=0.001)smodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['precision'])#model.summary()returmodell

4.3 — Arkitektur 3 — Deep CNN & ANN Layers

def cconstruct_model(learningRate):smodel = Sequential()smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), activation='relu'))smodel.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Flatten())smodel.add(Dense(256, activation='relu'))smodel.add(Dense(256, activation='relu'))smodel.add(Dense(12, activation='softmax'))optimizer = Adam(lr=learningRate)smodel.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['precision'])smodel.summary()returmodellmodel=cconstruct_model(0.001)

En Python-modul vid namn ANN Visualizer gör det möjligt att visualisera ett artificiellt neuralt nätverk med några rader kod (Gheorghiu, 2022). Den använder Keras och Pythons Graphviz-modul för att producera en snygg och tilltalande graf för neurala nätverk. Du har flexibiliteten att visualisera hela Deep Learning Network eller bara det Convolutional Neural Network du har skapat drivet av framsteg inom djupinlärning (Shah, 2018).

Använd följande struktur nedan för att skapa en pdf-representation av ditt neurala nätverk. Men innan dess måste vi kompilera ovanstående modeller.

model=construct_model()

ann_viz(model, view=True, filename=”network.gv”, title=”MyNeural Network”)

  • modell - Sekventiell modell från Keras
  • se — Visualisera grafen efter att ann_viz() har anropats
  • filnamn - Filens namn
  • titel - Någon specifik titel för att beteckna grafen
från ann_visualizer.visualize importera ann_vizann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — Model 1 — Simple Architecture”)
Figur 1: Ögonblicksbild av construct_model() skapad med ANN Visualizer. Kredit — Bild utvecklad av författaren med hjälp av Jupyter Notebook. originalutmatningen är för stor för att passa här som en bild, därför används en snapshot av de nedre lagren här.

Ett Python-verktyg som heter Visualkeras gör det lättare att se Keras neurala nätverksdesigner (antingen separat eller som en del av TensorFlow). De flesta stylingbehov kan tillgodoses med lätthet. Konvolutionella neurala nätverk (CNN) drar stor nytta av att utveckla arkitekturer i lagerstil. De flesta modeller, inklusive enkla feed-forward-nätverk, drar stor nytta av genereringen av grafisk arkitektur, som denna modul stöder (Gavrikov, 2022).

model1=construct_model()modell2=konstruera_modell()model3=cconstruct_model(0.009)importera visualkerasfrån PIL import ImageFontvisualkeras.layered_view(model1, legend=True)visualkeras.layered_view(model2, legend=True)visualkeras.layered_view(model3, legend=True)
Figur 2. Illustrerar en schematisk representation av tre olika modellarkitekturer. Kredit — Bild utvecklad av författaren med hjälp av Jupyter Notebook.

Smakämnen keras.utils.plot_model tillhandahåller inbyggda funktioner för att plotta en modell definierad och kompilerad genom Keras med hjälp av Graphviz och pydot-paket. Grafiskt är det mindre intuitivt än paketen som används ovan, men det beskriver den grundläggande arkitekturen för en sekventiell modell (Team, nd).

tf.keras.utils.plot_model(modell1,to_file="model.png",show_shapes=Sant,show_dtype=False,show_layer_names=Sant,rankdir="TB",expand_nested=Sant,dpi=96,layer_range=Ingen,show_layer_activations=Sant,)

Några hyperparametrar att ta hänsyn till:

  1. modell: En instans av Keras kompilerade modell eller modellobjekt
  2. till_fil: Filnamn på bilden
  3. visa_former: visa dimension och form för varje lager i det neurala nätverket
  4. show_layer_activation: visa aktiveringsfunktioner som används inom neuronerna
Figur 3. Illustrerar utdata från tf.keras.utils.plot_model(). Kredit — Bild utvecklad av författaren med hjälp av Jupyter Notebook.

TensorBoard är ett instrumentpanelsgränssnitt som låter användare visualisera loggar över olika modellkörningar. Loggar kan sträcka sig från att spåra alla modellvalideringsmått som noggrannhet, återkallelse, RMSE, MAPE och MSE över olika epoker till att skapa en konceptuell graf över modellens arkitektur. Det är ett kraftfullt verktyg för att visualisera om den avsedda modellen matchar den förväntade designen samtidigt som den ger insikter om hur en modell kan ändras med hjälp av en graf på op-nivå.

För att använda denna funktionalitet måste vi ladda TensorBoard först och sedan skapa en loggkatalog.

%load_ext tensorboardfrån datetime import datetimefrån tensorflow importkeras# Definiera Keras TensorBoard-återuppringning.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

Skapa Keras TensorBoard-återuppringning och ange loggkatalogen innan träning. Du kan se till att grafdata loggas för TensorBoard-visualisering genom att skicka denna callback till model.fit(). När du anropar TensorBoard kan det ta några minuter att ladda.

model.fit(X2_tåg, Y2_tåg,batch_size=64,epoker=5,callbacks=[tensorboard_callback])

Obs: X2_train och Y2_train är träningsdatauppsättningar som inte återspeglas i koderna ovan. Du kan ersätta detta med valfri träningsdata.

TensorBoard visar alltid grafen på op-nivå som standard. (Taggen "Standard" är markerad till vänster.) Grafen är upp och ner i jämförelse med koden eftersom data flödar från botten till toppen. Men som du kan se liknar grafen ungefär beskrivningen av Keras-modellen, med ytterligare kanter som leder till andra beräkningsnoder (Tensorflow, 2022).

Figur 4. Illustrerar utdata från TensorBoard. Kredit — Bild utvecklad av författaren med hjälp av Jupyter Notebook.

Mer information om hur du använder TensorBoard finns under Referens.

Ur en kommersiell synvinkel, där en användare måste presentera sin analys för en grupp av intressenter, tillför dessa diagram mer komplexitet till diskussionen. De kanske inte är ett extremt mervärde. Men ur ett akademiskt och lärande perspektiv är det fördelaktigt att använda dessa paket för att visa dessa djupinlärningsarkitekturer. ANN visualizer, för mig, sticker ut över resten eftersom det är lätt att smälta diagrammet, medan TensorBoards grafutdata kräver mer tekniska detaljer innan resultaten kan konsumeras.

Gavrikov, P. (2022, 13 april). visualkeras för Keras / TensorFlow. GitHub. https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022, 21 oktober). ANN Visualizer. GitHub. https://github.com/RedaOps/ann-visualizer

Shah, A. (2018, 28 april). Visualisera artificiella neurala nätverk (ANN) med bara en rad kod. Medium. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

Stack Overflow. (nd). maskininlärning — Hur visualiserar du neurala nätverksarkitekturer? Data Science Stack Exchange. Hämtad 29 oktober 2022 från https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

Team, K. (nd). Keras dokumentation: Modellplottningsverktyg. Keras.io. Hämtad 29 oktober 2022 från https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

Tensorflöde. (2022, 6 januari). Granska TensorFlow-grafen | TensorBoard. TensorFlow. https://www.tensorflow.org/tensorboard/graphs

Hur man visualiserar neurala nätverksarkitekturer i Python Återpublicerad från källan https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 via https:// mot datascience.com/feed

<!–

->

Tidsstämpel:

Mer från Blockchain-konsulter