Zephyrnet-logo

Visualiseer Deep Learning-modellen met Visualkeras

Datum:

                                                               Afbeeldingsbron: auteur

Introductie

Deep learning, een onderdeel van machine learning, wint ongetwijfeld aan populariteit dankzij big data. Zowel startups als commerciële organisaties concurreren om hun waardevolle gegevens te gebruiken voor bedrijfsgroei en klanttevredenheid met behulp van deep learning-modellen. Verschillende interessante real-world toepassingen zoals zelfrijdende auto's, object- en beelddetectie, medische beeldvorming, natuurlijke taalverwerking en nog veel meer hebben diepe neurale netwerken als kern. Het belangrijkste voordeel van deep learning-modellen is dat ze alle functies op hoog niveau in een bepaalde dataset stapsgewijs proberen te leren. Bij deep learning leert het model afbeeldingen, tekst of geluid te classificeren op basis van de verstrekte gegevens. Deze modellen zijn zeer nauwkeurig en presteren soms beter dan mensen. Ze gebruiken algoritmen om conclusies te trekken en beslissingen te nemen op basis van invoergegevens. Deze modellen zijn getraind op een grote hoeveelheid gelabelde data en neurale netwerkarchitecturen die meerdere lagen bevatten.

Neurale netwerken

Kunstmatige neurale netwerken zijn computersystemen die lijken op het biologische neurale netwerk in het menselijk brein. Een eenvoudige ANN is een verzameling verbonden eenheden of knooppunten die kunstmatige neuronen worden genoemd en die op dezelfde manier zijn gemodelleerd als de neuronen van een biologisch brein. ANN gebruikt de verwerking van de hersenen als basis om algoritmen te maken die kunnen worden gebruikt om complexe patronen en voorspellingsproblemen te modelleren. Een ANN met meer dan drie lagen (invoerlaag, uitvoerlaag, meerdere verborgen lagen) kan een 'diep neuraal netwerk' worden genoemd. Het aantal verborgen lagen in een neuraal netwerk wordt in een deep learning-model gewoonlijk 'diep' genoemd. Diepe neurale netwerken kunnen meerdere verborgen lagen hebben, terwijl traditionele neurale netwerken meestal slechts 2-3 lagen hebben.

Neurale netwerkarchitectuur

De belangrijkste componenten van een neuraal netwerk zijn:

  1. Input – De input is een maat voor het kenmerk van het model. In eenvoudige bewoordingen kunnen we zeggen dat input de verzameling attributen is die in het model worden ingevoerd voor leerdoeleinden.
  2. Gewichten - Gewichten zijn vergelijkbaar met scalaire vermenigvuldiging. Het primaire doel van gewichten in een neuraal netwerk is om de kenmerken te benadrukken die het meest bijdragen aan het leerproces. Dit wordt bereikt door scalaire vermenigvuldiging toe te passen op de invoerwaarde en de gewichtsmatrix. We kunnen het belang van elke invoer en de richting van de respectieve gewichten begrijpen.
  3. Overdrachtsfunctie – De Overdrachtsfunctie verschilt van de andere componenten omdat er meerdere inputs voor nodig zijn. De overdrachtsfunctie combineert meerdere ingangen tot één uitgangswaarde zodat de activeringsfunctie kan worden toegepast.
  4. Activeringsfunctie – Een activeringsfunctie transformeert het getal van de overdrachtsfunctie in een waarde die de invoer vertegenwoordigt. Meestal is de activeringsfunctie niet-lineair. Zonder dit zou de uitvoer een lineair mengsel zijn van de invoerwaarden, zonder de mogelijkheid om niet-lineariteit in het netwerk op te nemen. Twee veel voorkomende activeringsfuncties zijn - ReLu en sigmoid.
  5. Bias - Het doel van bias is om de waarde te wijzigen die wordt geproduceerd door de activeringsfunctie.

Een kunstmatig neuraal netwerk bestaat uit drie lagen: invoer, uitvoer en een of meer verborgen lagen. Elke laag bestaat uit verschillende neuronen die op een rij zijn gestapeld. Evenzo bestaat een meerlagig neuraal netwerk uit vele lagen die naast elkaar zijn gerangschikt. De structuur van een neuraal netwerk ziet eruit als de onderstaande afbeelding.

Deep learning-modellen visualiseren

                                                           Afbeeldingsbron: auteur

Een neuraal netwerk visualiseren met behulp van Keras Library

Nu we enkele basisprincipes van deep learning en neurale netwerken hebben besproken, weten we dat deep learning-modellen complex zijn en dat de manier waarop ze beslissingen nemen ook moeilijk te begrijpen is. Het kan interessant zijn om te visualiseren hoe een neuraal netwerk verschillende neuronen met elkaar verbindt. Het kan een geweldige manier zijn om de modelarchitectuur te visualiseren en tijdens het presenteren met uw publiek te delen.

De Keras-bibliotheek maakt visualisatie van de neurale netwerken mogelijk met behulp van de opdracht plot_model.

Een neuraal netwerkmodel maken

Voordat we met deze tutorial beginnen, wordt verwacht dat we een basiskennis hebben van het maken van een neuraal netwerk. Het is essentieel om het hulpprogramma dat in dit artikel wordt besproken te begrijpen.

Laten we beginnen met het maken van een basis Artificial Neural Network (ANN) met behulp van Keras en zijn functies.

Voel je vrij om een ​​ander neuraal netwerk te maken, aangezien we alleen het uiteindelijke model visualiseren en daarom kan het interessant zijn om de mogelijkheden van de visuele Keras-bibliotheek (later in dit artikel besproken) met een ander model te verkennen.

van keras.models import Sequential van keras.layers import Dichte
model = Sequential() model.add(Dense(12, input_dim=8, activatie='relu')) model.add(Dense(8, activatie='relu')) model.add(Dense(1, activatie=' sigmoid')) model.summary()

We kunnen de gegenereerde afbeelding weergeven met behulp van de volgende opdracht.

van keras.utils.vis_utils import plot_model plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)

Neuraal netwerkmodel

Uit de bovenstaande afbeelding kunnen we duidelijk de modelstructuur visualiseren en hoe verschillende lagen met elkaar in verbinding staan ​​via een aantal neuronen. Laten we vervolgens een CNN bouwen en deze visualiseren met behulp van de Keras-bibliotheek.

van keras importeer modellen van keras.layers import Dense, Conv2D, MaxPooling2D, Flatten, Activering van keras import lagen model = Sequential() model.add(Conv2D(64,(4,4),input_shape=(32,32,3) ,activation='relu',padding='same')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Conv2D(64,(4,4),input_shape=(32,32,3, 2),activation='relu',padding='same')) model.add(MaxPooling2,2D(pool_size=(0.2))) model.add(Dropout(2)) model.add(Conv128D(4,4,(32,32,3 ,2),input_shape=(2,2),activation='relu',padding='same')) model.add(MaxPooling0.25D(pool_size=(2))) model.add(Dropout(128) ) model.add(Conv4,4D(32,32,3,(2),input_shape=(2,2),activation='relu',padding='same')) model.add(MaxPooling0.35D(pool_size=(256 ))) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(10, activatie='relu')) model.add(Dropout(XNUMX)) model.add(Dense( XNUMX, activatie='softmax'))

We kunnen de eerder gebruikte 'plot_model'-opdracht van dit model visualiseren.

Perceelmodel

Hier kunnen we de verschillende lagen van het neurale netwerk visualiseren, samen met het aantal filters, filtergrootte, nee. van neuronen, enz. Het plot_model-commando uit de Keras-bibliotheek is nuttig om zowel de ANN- als de CNN-structuur weer te geven vanwege de lay-out in stroomdiagramstijl van het neurale netwerk. Maar als een CNN meer lagen heeft, vereist deze visualisatiestijl meer ruimte en is deze moeilijk leesbaar. Er is nog een bibliotheek, 'Visualkeras', die ons gemakkelijk kan helpen deze netwerken te visualiseren. In deze tutorial zullen we de Visualkeras-bibliotheek verkennen en er visualisaties mee ontwikkelen.

Visualkeras gebruiken om het neurale netwerk te visualiseren

Visualkeras is een open-source Python-bibliotheek die helpt bij de visualisatie van de neurale netwerkarchitectuur van Keras. Het biedt eenvoudige aanpassing om aan een breed scala aan vereisten te voldoen. Visualkeras genereert gelaagde stijlarchitecturen, die ideaal zijn voor CNN's (Convolutional Neural Networks), en grafische stijlarchitecturen, die geschikt zijn voor de meeste modellen, inclusief eenvoudige feed-forward-netwerken. Het is een van de nuttigste bibliotheken om te begrijpen hoe verschillende lagen met elkaar verbonden zijn.

Laten we beginnen met het installeren van de Visualkeras-bibliotheek in de opdrachtprompt.

pip installeer visualkeras

Vervolgens importeren we alle bibliotheken die nodig zijn om een ​​sequentieel model te bouwen.

import keras importeer tensorflow als tf uit tensorflow importeer keras uit keras.models importeer sequentieel uit tensorflow.keras.layers importeer Input, Conv2D, Dense, Flatten, Dropout van tensorflow.keras.layers importeer GlobalMaxPooling2D, MaxPooling2D van tensorflow import Model.keras.models van tensorflow.keras importeer regularizers, optimizers

Nu zullen we een eenvoudig model bouwen met enkele convolutionele en poolingslagen.

model = Sequential()
model.add(Conv2D(64,(4,4),input_shape=(32,32,3),activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(128,(4,4),input_shape=(32,32,3),activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))

Laten we eens kijken naar de samenvatting van het gedefinieerde model.

Visualkeras | Deep learning-modellen visualiseren

Om nu het neurale netwerkmodel te visualiseren, zullen we het Visualkeras-bibliotheekpakket importeren, zoals hieronder wordt weergegeven.

importeer visualkeras visualkeras.layered_view(model)

Visualkeras-bibliotheek

De visualisatie van het neurale netwerkmodel hierboven toont ons de twee verschillende lagen, namelijk convolutionele lagen in geel en poolingslagen in roze.

Laten we de complexiteit vergroten en wat meer lagen toevoegen met een paar dropouts om het effect van visualisatie te zien.

model = Sequential()
model.add(Conv2D(64,(4,4),input_shape=(32,32,3),activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64,(4,4),input_shape=(32,32,3),activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Conv2D(128,(4,4),input_shape=(32,32,3),activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(128,(4,4),input_shape=(32,32,3),activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.35))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

De samenvatting van het gedefinieerde model is hieronder weergegeven.

Visualisatiemodel

Nu visualiseren we het model met de nieuw toegevoegde lagen.

Deep learning-modellen visualiseren

Nu gaan we de legenda aan de visualisatie toevoegen. De eigenschap legenda geeft het verband aan tussen kleur en laagtype. Het is ook mogelijk om een ​​aangepast "PIL.ImageFont" aan te bieden om te gebruiken, anders zal Visualkeras het standaard PIL-lettertype gebruiken. Afhankelijk van uw besturingssysteem moet u mogelijk het volledige pad naar het gewenste lettertype opgeven. In het geval van Google Colab, kopieer het vereiste lettertype naar de map TrueType-lettertypen, anders kunt u het standaardlettertype gebruiken.

visualkeras.layered_view(model, legend=True) # zonder aangepast lettertype uit PIL import ImageFont font = ImageFont.truetype("arial.ttf", 12) visualkeras.layered_view(model, legend=True, font=font) # geselecteerd lettertype

Visuele keras

Met behulp van de volgende code kunnen we het neurale netwerkmodel in 2D-ruimte of in platte stijl zien.

visualkeras.layered_view(model, legend=True, font=font, draw_volume=False)

Neuraal netwerkmodel

De afstand tussen de lagen kan worden aangepast met de variabele 'afstand', zoals hieronder weergegeven.

visualkeras.layered_view(model, legend=True, font=font, draw_volume=False,spatiëring=30)

Afstandsvariabele | Deep learning-modellen visualiseren

We kunnen de kleuren van de lagen aanpassen met behulp van de volgende code.

from tensorflow.keras importeer lagen uit collecties import defaultdict color_map = defaultdict(dict) color_map[layers.Conv2D]['fill'] = '#00f5d4' color_map[layers.MaxPooling2D]['fill'] = '#8338ec' color_map[ lagen.Dropout]['fill'] = '#03045e' color_map[layers.Dense]['fill'] = '#fb5607' color_map[layers.Flatten]['fill'] = '#ffbe0b' visualkeras.layered_view( model, legend=True, font=font,color_map=color_map)

Met behulp van deze bibliotheek kunnen we alle neurale netwerklagen op een handige manier weergeven met een paar regels code. Deze bibliotheek is handig bij het gebruik van AutoML-tools, aangezien het neurale netwerk door de tool wordt ingesteld. Met deze bibliotheek kunnen we gemakkelijk details vinden over de lagen van het neurale netwerk om het model beter te begrijpen door middel van kleurrijke visualisaties.

Samengevat

Het visualiseren van neurale netwerken is nuttig om de verbindingen tussen de lagen te begrijpen. Het is handig wanneer we de structuur van het gebouwde neurale netwerk willen uitleggen voor onderwijs- of presentatiedoeleinden. Het gebruik van een visualisatie van het stroomdiagramtype voor neurale netwerken met meerdere verborgen lagen kan soms vervelend zijn om te lezen vanwege ruimtebeperkingen. In dit artikel zagen we een eenvoudige methode om een ​​neuraal netwerk te visualiseren met behulp van de Visualkeras-bibliotheek. Met minimale code kunnen we snel de structuur/lay-out van het neurale netwerk weergeven en aanpassen met behulp van deze bibliotheek. Ik hoop dat je dit artikel met plezier hebt gelezen. De code is beschikbaar op mijn GitHub-repository. Probeer deze bibliotheek voor uw ANN/CNN-architectuur en visualiseer het neurale netwerk beter.

Lees meer artikelen op onze blog. Klik hier.

auteur Bio

Devashree heeft een M.Eng-graad in informatietechnologie uit Duitsland en een achtergrond in datawetenschap. Ze werkt graag met statistieken en ontdekt verborgen inzichten in gevarieerde datasets om verbluffende dashboards te creëren. Ze deelt graag haar kennis over AI door technische artikelen te schrijven op verschillende technologische platforms.
In haar vrije tijd houdt ze van reizen, fictie lezen, Sudoku-puzzels oplossen en deelnemen aan programmeerwedstrijden.

Je kunt haar volgen op LinkedIn, GitHub, Kaggle, Medium, Twitter.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt. 

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?