Hvordan visualisere nevrale nettverksarkitekturer i Python

En rask guide for å lage diagrammatisk representasjon av nevrale nettverk ved hjelp av Jupyter eller Google Colab

Bildekreditt — Utviklet av forfatteren ved hjelp av visualkeras og Jupyter Notebook.

Når vi jobber med kunstige nevrale nettverk eller andre varianter som Convolution Neural Networks eller Recurrent Neural Networks, ønsker vi ofte å visualisere og lage en diagrammatisk representasjon av vår kompilerte modell. Dette kan løse to formål:

  1. Mens vi definerer og trener flere modeller, kan vi visualisere dybden av modellen vår og sammenligne forskjellige lag og hvordan de er sekvensielt lagt ned.
  2. Gir bedre forståelse av modellstrukturen, aktiveringsfunksjoner brukt i hvert lag, formen på hvert lag (antall nevroner) og parametere som må trenes

Det er noen få pakker lett tilgjengelig i python som kan lage en visuell representasjon av våre nevrale nettverksmodeller. De tre første pakkene kan brukes selv før en modell er trent (modellen må bare defineres og kompileres); Tensor Boards krever imidlertid at brukeren trener modellen på nøyaktige data før arkitekturen kan visualiseres.

  1. ANN Visualizer
  2. Visual Keras
  3. Keras modellplot
  4. Tensor Board
pip installer visualkeraspip installer ann_visualizerpip installer graphviz

Vi trenger ikke å installere "Tensor Board" og "Keras Model Plot" separat. Dette kommer med den første installasjonen av Tensorflow & Keras.

Vi bruker kanskje bare noen få av bibliotekene som er oppført nedenfor. De fleste biblioteker kan konvertere en TensorFlow-modell til et diagram uten å eksplisitt trene den på data. Du kan betrakte dette som en enkelt kilde til sannhet. Noen biblioteker, som Pandas, Skimage og OpenCV, vil komme godt med når du leser strukturerte data eller bilder.

# Importer nødvendige bibliotekerimporter pandaer som pdimport numpy som np # Import numpyfra skimage import data, io # Importer skimage bibliotek (data - Testbilder og eksempeldata.# io - Lese, lagre og vise bilder.)fra skimage.color import rgb2grayimporter matplotlib.pyplot som plt # Importer matplotlib.pyplot (plottingrammeverk i Python.)%matplotlib inlineimport os # Denne modulen gir en bærbar måte å bruke operativsystemavhengig funksjonalitet på.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'importer advarsler# Undertrykk advarslerwarnings.filterwarnings('ignore')fra IPython.display importskjermimporter cv2 som cv
fra sklearn.metrics import confusion_matrix
fra sklearn.model_selection importere train_test_splitfra tensorflow.keras import utilsfra tensorflow.keras.models importer Sequential,load_modelfra tensorflow.keras.layers importerer Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationfra tensorflow.keras.optimizers importerer Adamimporter tensorflow som tfimportere seaborn som sns

Noen nyttige linker for å utforske mer innhold rundt ANN-er og CNN-er fra bunnen av.

Vi skal definere tre forskjellige CNN-modeller med forskjellige hyperparametre. Ideelt sett, i den virkelige verden, tar vi sikte på å implementere forskjellige arkitekturer for å maksimere nøyaktigheten eller relevante beregninger, med tanke på at vi bygger modellen for en klassifiseringsoppgave i flere kategorier. Vårt valg av problemtype vil ikke ha noen innvirkning på hvordan visualiseringspakkene skal brukes.

Vi opprettet brukerdefinerte funksjoner for å bygge tre forskjellige modeller separat med et annet antall CNN-lag, maks-pooling og tette lag.

4.1 – Arkitektur 1 – Grunne CNN-lag + ANN-lag

def konstruksjonsmodell():modell = Sekvensiell()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 (Flatten ())model.add(Dense(256, activation='relu'))model.add(Dense(12, activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])returmodell

4.2 — Arkitektur 2 — Deep CNN + Shallow ANN Layers

def sconstruct_model():smodel = Sekvensiell()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=['accuracy'])#model.summary()returmodell

4.3 — Arkitektur 3 — Deep CNN & ANN Layers

def cconstruct_model(læringshastighet):smodel = Sekvensiell()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=['accuracy'])smodel.summary()returmodellmodel=cconstruct_model(0.001)

En Python-modul kalt ANN Visualizer gjør det mulig å visualisere et kunstig nevralt nettverk med noen få linjer med kode (Gheorghiu, 2022). Den bruker Keras og Pythons Graphviz-modul for å produsere en ryddig og tiltalende nevrale nettverksgraf. Du har fleksibiliteten til å visualisere hele Deep Learning Network eller bare det Convolutional Neural Network du har opprettet drevet av fremskritt innen dyp læring (Shah, 2018).

Bruk følgende struktur nedenfor for å generere en pdf-representasjon av ditt nevrale nettverk. Men før det må vi kompilere modellene ovenfor.

model=construct_model()

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

  • modell - Sekvensiell modell fra Keras
  • utsikt - Visualiser grafen etter at ann_viz() har blitt kalt
  • filnavn - Navnet på filen
  • tittel - Enhver spesifikk tittel for å betegne grafen
fra ann_visualizer.visualize importer ann_vizann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN – Model 1 – Simple Architecture”)
Figur 1: Øyeblikksbilde av construct_model() opprettet med ANN Visualizer. Kreditt — Bilde utviklet av forfatteren ved hjelp av Jupyter Notebook. den originale utgangen er for stor til å passe her som et bilde, derfor brukes et øyeblikksbilde av de nederste lagene her.

Et Python-verktøy kalt Visualkeras gjør det lettere å se Keras nevrale nettverksdesign (enten separat eller som en del av TensorFlow). De fleste stylingbehov kan dekkes med letthet. Konvolusjonelle nevrale nettverk (CNN) drar betydelig nytte av å utvikle lagdelte arkitekturer. De fleste modellene, inkludert enkle feed-forward-nettverk, drar stor nytte av genereringen av grafisk arkitektur, som denne modulen støtter (Gavrikov, 2022).

modell1=konstruksjonsmodell()modell2=konstruksjonsmodell()model3=cconstruct_model(0.009)importere visualkerasfra PIL import ImageFontvisualkeras.layered_view(model1, legend=True)visualkeras.layered_view(model2, legend=True)visualkeras.layered_view(model3, legend=True)
Figur 2. Illustrerer en skjematisk representasjon av tre ulike modellarkitekturer. Kreditt — Bilde utviklet av forfatteren ved hjelp av Jupyter Notebook.

De keras.utils.plot_model gir innebygde funksjoner for å plotte en modell definert og kompilert gjennom Keras ved å bruke Graphviz og pydot-pakker. Grafisk er den mindre intuitiv enn pakkene som er brukt ovenfor, men den skisserer den grunnleggende arkitekturen til en sekvensiell modell (Team, nd).

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

Noen få hyperparametre å vurdere:

  1. modell: En forekomst av Keras kompilerte modell eller modellobjekt
  2. å lagre: Filnavn på bildet
  3. show_shapes: vise dimensjon og form for hvert lag i det nevrale nettverket
  4. show_layer_activation: vise aktiveringsfunksjoner som brukes i nevronene
Figur 3. Illustrerer utdataene til tf.keras.utils.plot_model(). Kreditt — Bilde utviklet av forfatteren ved hjelp av Jupyter Notebook.

TensorBoard er et dashbord-grensesnitt som lar brukere visualisere logger på tvers av forskjellige modellkjøringer. Logger kan variere fra sporing av modellvalideringsmål som nøyaktighet, tilbakekalling, RMSE, MAPE og MSE over forskjellige epoker til å lage en konseptuell graf over modellens arkitektur. Det er et kraftig verktøy for å visualisere om den tiltenkte modellen samsvarer med den forventede designen, samtidig som den gir innsikt i hvordan en modell kan endres ved hjelp av en graf på op-nivå.

For å bruke denne funksjonaliteten må vi først laste TensorBoard og deretter opprette en loggkatalog.

%load_ext tensorboardfra datetime importer datetimefra tensorflow import keras# Definer Keras TensorBoard tilbakeringing.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

Opprett Keras TensorBoard tilbakeringing og spesifiser loggkatalogen før trening. Du kan sørge for at grafdata logges for TensorBoard-visualisering ved å levere denne tilbakeringingen til model.fit(). Når du starter TensorBoard, kan det ta noen minutter å laste inn.

model.fit(X2_tog, Y2_tog,batch_size=64,epoker=5,callbacks=[tensorboard_callback])

Merk: X2_train og Y2_train er treningsdatasett som ikke gjenspeiles i kodene ovenfor. Du kan erstatte dette med dine egne treningsdata.

TensorBoard viser alltid grafen på op-nivå som standard. («Standard»-taggen er uthevet til venstre.) Grafen er opp ned i forhold til koden fordi data flyter fra bunn til topp. Men som du kan se, ligner grafen omtrent på beskrivelsen av Keras-modellen, med ytterligere kanter som fører til andre beregningsnoder (Tensorflow, 2022).

Figur 4. Illustrerer utdataene til TensorBoard. Kreditt — Bilde utviklet av forfatteren ved hjelp av Jupyter Notebook.

Mer kontekst om hvordan du bruker TensorBoard finner du under Referanse.

Fra et kommersielt synspunkt, der en bruker må presentere analysen sin for en gruppe interessenter, gir disse diagrammene mer kompleksitet til diskusjonen. De er kanskje ikke en ekstrem verdiøkning. Fra et akademisk og læringsperspektiv er det imidlertid fordelaktig å bruke disse pakkene for å vise disse dyplæringsarkitekturene. ANN visualizer, for meg, skiller seg ut over resten siden det er lett å fordøye diagrammet, mens TensorBoards grafutdata krever flere tekniske detaljer før resultatene kan konsumeres.

Gavrikov, P. (2022, 13. april). visualkeras for 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). Visualisering av kunstige nevrale nettverk (ANN) med bare én kodelinje. Medium. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

Stack Overflow. (nd). maskinlæring — Hvordan visualiserer du nevrale nettverksarkitekturer? Data Science Stack Exchange. Hentet 29. oktober 2022 fra https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

Team, K. (nd). Keras dokumentasjon: Modellplottingverktøy. Keras.io. Hentet 29. oktober 2022 fra https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

Tensorflow. (2022, 6. januar). Undersøke TensorFlow-grafen | TensorBoard. TensorFlow. https://www.tensorflow.org/tensorboard/graphs

Hvordan visualisere nevrale nettverksarkitekturer i Python Gjenpublisert fra kilde https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 via https:// mot datascience.com/feed

<!–

->

Tidstempel:

Mer fra Blockchain-konsulenter