A Convolutioneel Neuraal Netwerk (CNN) is een type Deep Learning neurale netwerkarchitectuur dat vaak wordt gebruikt in Computer Vision. Computervisie is een gebied van kunstmatige intelligentie waarmee een computer de afbeelding of visuele gegevens kan begrijpen en interpreteren.
Als het om machinaal leren gaat, Kunstmatige neurale netwerken presteren echt goed. Neurale netwerken worden gebruikt in verschillende datasets, zoals afbeeldingen, audio en tekst. Verschillende soorten neurale netwerken worden voor verschillende doeleinden gebruikt, bijvoorbeeld voor het voorspellen van de volgorde van woorden die we gebruiken Terugkerende neurale netwerken meer precies een LSTM Op dezelfde manier gebruiken we voor beeldclassificatie Convolution Neural-netwerken. In deze blog gaan we een basisbouwsteen voor CNN bouwen.
ffilms
In een regulier neuraal netwerk zijn er drie soorten lagen:
- Invoerlagen: Het is de laag waarin we input geven aan ons model. Het aantal neuronen in deze laag is gelijk aan het totale aantal kenmerken in onze gegevens (aantal pixels in het geval van een afbeelding).
- Verborgen laag: De invoer van de invoerlaag wordt vervolgens in de verborgen laag ingevoerd. Er kunnen veel verborgen lagen zijn, afhankelijk van ons model en de gegevensgrootte. Elke verborgen laag kan verschillende aantallen neuronen hebben, die doorgaans groter zijn dan het aantal kenmerken. De output van elke laag wordt berekend door matrixvermenigvuldiging van de output van de vorige laag met leerbare gewichten van die laag en vervolgens door de toevoeging van leerbare biases, gevolgd door een activeringsfunctie die het netwerk niet-lineair maakt.
- Uitvoerlaag: De uitvoer van de verborgen laag wordt vervolgens ingevoerd in een logistieke functie zoals sigmoid of softmax, die de uitvoer van elke klasse omzet in de waarschijnlijkheidsscore van elke klasse.
De gegevens worden in het model ingevoerd en de uitvoer van elke laag wordt verkregen uit de bovenstaande stap voorwaarts Vervolgens berekenen we de fout met behulp van een foutfunctie. Enkele veel voorkomende foutfuncties zijn cross-entropie, kwadratische verliesfout, enz. De foutfunctie meet hoe goed het netwerk presteert. Daarna gaan we terug naar het model door de afgeleiden te berekenen. Deze stap heet Convolutional Neural Network (CNN) is de uitgebreide versie van kunstmatige neurale netwerken (ANN) die voornamelijk wordt gebruikt om het kenmerk uit de rasterachtige matrixgegevensset te extraheren. Bijvoorbeeld visuele datasets zoals afbeeldingen of video's waarbij datapatronen een grote rol spelen.
CNN-architectuur
Convolutioneel neuraal netwerk bestaat uit meerdere lagen, zoals de invoerlaag, de convolutionele laag, de poolinglaag en volledig verbonden lagen.

Eenvoudige CNN-architectuur
De Convolutionele laag past filters toe op het invoerbeeld om kenmerken te extraheren, de Pooling-laag downsampelt het beeld om berekeningen te verminderen, en de volledig verbonden laag doet de uiteindelijke voorspelling. Het netwerk leert de optimale filters door middel van backpropagation en gradiëntdaling.
Hoe convolutionele lagen werken
Convolutie Neurale Netwerken of covnets zijn neurale netwerken die hun parameters delen. Stel je voor dat je een afbeelding hebt. Het kan worden weergegeven als een balk met zijn lengte, breedte (afmeting van de afbeelding) en hoogte (dwz het kanaal, aangezien afbeeldingen over het algemeen rode, groene en blauwe kanalen hebben).

Stel je nu voor dat je een klein stukje van deze afbeelding neemt en er een klein neuraal netwerk op draait, een zogenaamde filter of kernel, met bijvoorbeeld K-uitvoer en deze verticaal weergeeft. Schuif dat neurale netwerk nu over het hele beeld, als resultaat krijgen we een ander beeld met verschillende breedtes, hoogtes en dieptes. In plaats van alleen R-, G- en B-kanalen hebben we nu meer kanalen, maar minder breedte en hoogte. Deze operatie wordt genoemd Convolutie . Als de patchgrootte hetzelfde is als die van de afbeelding, is er sprake van een regulier neuraal netwerk. Door deze kleine patch hebben we minder gewichten.

Afbeeldingsbron: Deep Learning Udacity
Laten we het nu hebben over een stukje wiskunde dat betrokken is bij het hele convolutieproces.
- Convolutielagen bestaan uit een reeks leerbare filters (of kernels) met kleine breedtes en hoogtes en dezelfde diepte als die van het invoervolume (3 als de invoerlaag beeldinvoer is).
- Als we bijvoorbeeld convolutie moeten uitvoeren op een afbeelding met de afmetingen 34x34x3. De mogelijke grootte van filters kan axax3 zijn, waarbij ‘a’ zoiets als 3, 5 of 7 kan zijn, maar kleiner in vergelijking met de afbeeldingsdimensie.
- Tijdens de voorwaartse doorgang schuiven we elk filter stap voor stap over het hele ingangsvolume waar elke stap wordt aangeroepen stap (die een waarde van 2, 3 of zelfs 4 kan hebben voor hoogdimensionale afbeeldingen) en bereken het puntproduct tussen de kernelgewichten en de patch op basis van het invoervolume.
- Terwijl we onze filters verschuiven, krijgen we voor elk filter een 2D-uitvoer en als resultaat stapelen we ze op elkaar. We krijgen een uitvoervolume met een diepte gelijk aan het aantal filters. Het netwerk leert alle filters.
Lagen die worden gebruikt om ConvNets te bouwen
Een complete Convolution Neural Networks-architectuur wordt ook wel covnets genoemd. Een covnets is een reeks lagen, en elke laag transformeert het ene volume naar het andere via een differentieerbare functie.
Soorten lagen: datasets
Laten we een voorbeeld nemen door een covnets uit te voeren op een afbeelding met afmeting 32 x 32 x 3.
- Invoerlagen: Het is de laag waarin we input geven aan ons model. Bij CNN zal de invoer doorgaans een afbeelding of een reeks afbeeldingen zijn. Deze laag bevat de onbewerkte invoer van de afbeelding met breedte 32, hoogte 32 en diepte 3.
- Convolutionele lagen: Dit is de laag die wordt gebruikt om het object uit de invoergegevensset te extraheren. Het past een reeks leerbare filters toe, bekend als de kernels, op de invoerafbeeldingen. De filters/kernels zijn kleinere matrices, meestal in de vorm van 2×2, 3×3 of 5×5. het schuift over de ingevoerde beeldgegevens en berekent het puntproduct tussen het kernelgewicht en de overeenkomstige ingevoerde beeldpatch. De uitvoer van deze laag wordt featuremaps genoemd. Stel dat we in totaal 12 filters gebruiken voor deze laag, dan krijgen we een uitvoervolume met de afmeting 32 x 32 x 12.
- Activeringslaag: Door een activeringsfunctie toe te voegen aan de uitvoer van de voorgaande laag, voegen activeringslagen niet-lineariteit toe aan het netwerk. het zal een elementgewijze activeringsfunctie toepassen op de uitvoer van de convolutielaag. Enkele veel voorkomende activeringsfuncties zijn cv : maximaal(0, x), Visachtig , Lekkende RELU , etc. Het volume blijft ongewijzigd en het uitvoervolume heeft de afmetingen 32 x 32 x 12.
- Poollaag: Deze laag wordt periodiek in de covnets ingevoegd en de belangrijkste functie ervan is het verkleinen van de volumegrootte, waardoor de berekening snel het geheugen vermindert en ook overfitting voorkomt. Er zijn twee veel voorkomende soorten poollagen maximale pooling En gemiddelde pooling . Als we een maximaal zwembad gebruiken met 2 x 2 filters en stap 2, zal het resulterende volume de afmeting 16x16x12 hebben.

Bron afbeelding: cs231n.stanford.edu
- Afvlakking: De resulterende kenmerkkaarten worden na de convolutie- en poolinglagen afgevlakt tot een eendimensionale vector, zodat ze kunnen worden doorgegeven aan een volledig gekoppelde laag voor categorisatie of regressie.
- Volledig verbonden lagen: Het neemt de invoer van de vorige laag en berekent de uiteindelijke classificatie- of regressietaak.

Bron afbeelding: cs231n.stanford.edu
- Uitvoerlaag: De uitvoer van de volledig verbonden lagen wordt vervolgens ingevoerd in een logistieke functie voor classificatietaken zoals sigmoid of softmax, die de uitvoer van elke klasse omzet in de waarschijnlijkheidsscore van elke klasse.
Voorbeeld:
Laten we een afbeelding bekijken en de bewerkingen convolutielaag, activeringslaag en poolinglaag toepassen om het binnenobject te extraheren.
Invoerafbeelding:

Invoer afbeelding
Stap:
- importeer de benodigde bibliotheken
- stel de parameter in
- definieer de kern
- Laad de afbeelding en plot deze.
- Formatteer de afbeelding opnieuw
- Pas de convolutielaagbewerking toe en plot het uitvoerbeeld.
- Pas de activeringslaagbewerking toe en plot het uitvoerbeeld.
- Pas de poolinglaagbewerking toe en plot het uitvoerbeeld.
Python3
# import the necessary libraries> import> numpy as np> import> tensorflow as tf> import> matplotlib.pyplot as plt> from> itertools>import> product> > # set the param> plt.rc(>'figure'>, autolayout>=>True>)> plt.rc(>'image'>, cmap>=>'magma'>)> > # define the kernel> kernel>=> tf.constant([[>->1>,>->1>,>->1>],> >[>->1>,>8>,>->1>],> >[>->1>,>->1>,>->1>],> >])> > # load the image> image>=> tf.io.read_file(>'Ganesh.webp'plain'>)> image>=> tf.io.decode_jpeg(image, channels>=>1>)> image>=> tf.image.resize(image, size>=>[>300>,>300>])> > # plot the image> img>=> tf.squeeze(image).numpy()> plt.figure(figsize>=>(>5>,>5>))> plt.imshow(img, cmap>=>'gray'>)> plt.axis(>'off'>)> plt.title(>'Original Gray Scale image'>)> plt.show();> > > # Reformat> image>=> tf.image.convert_image_dtype(image, dtype>=>tf.float32)> image>=> tf.expand_dims(image, axis>=>0>)> kernel>=> tf.reshape(kernel, [>*>kernel.shape,>1>,>1>])> kernel>=> tf.cast(kernel, dtype>=>tf.float32)> > # convolution layer> conv_fn>=> tf.nn.conv2d> > image_filter>=> conv_fn(> >input>=>image,> >filters>=>kernel,> >strides>=>1>,># or (1, 1)> >padding>=>'SAME'>,> )> > plt.figure(figsize>=>(>15>,>5>))> > # Plot the convolved image> plt.subplot(>1>,>3>,>1>)> > plt.imshow(> >tf.squeeze(image_filter)> )> plt.axis(>'off'>)> plt.title(>'Convolution'>)> > # activation layer> relu_fn>=> tf.nn.relu> # Image detection> image_detect>=> relu_fn(image_filter)> > plt.subplot(>1>,>3>,>2>)> plt.imshow(> ># Reformat for plotting> >tf.squeeze(image_detect)> )> > plt.axis(>'off'>)> plt.title(>'Activation'>)> > # Pooling layer> pool>=> tf.nn.pool> image_condense>=> pool(>input>=>image_detect,> >window_shape>=>(>2>,>2>),> >pooling_type>=>'MAX'>,> >strides>=>(>2>,>2>),> >padding>=>'SAME'>,> >)> > plt.subplot(>1>,>3>,>3>)> plt.imshow(tf.squeeze(image_condense))> plt.axis(>'off'>)> plt.title(>'Pooling'>)> plt.show()> |
kaart in Java
>
>
Uitvoer :

Originele grijswaardenafbeelding

Uitvoer
Voordelen van convolutionele neurale netwerken (CNN's):
- Goed in het detecteren van patronen en kenmerken in afbeeldingen, video's en audiosignalen.
- Robuust tegen translatie-, rotatie- en schaalinvariantie.
- End-to-end training, geen noodzaak voor handmatige extractie van functies.
- Kan grote hoeveelheden gegevens verwerken en een hoge nauwkeurigheid bereiken.
Nadelen van convolutionele neurale netwerken (CNN's):
- Het is rekenkundig duur om te trainen en vereist veel geheugen.
- Kan gevoelig zijn voor overfitting als er niet voldoende gegevens of een goede regularisatie worden gebruikt.
- Vereist grote hoeveelheden gelabelde gegevens.
- De interpreteerbaarheid is beperkt, het is moeilijk te begrijpen wat het netwerk heeft geleerd.
Veelgestelde vragen (FAQ's)
1: Wat is een convolutioneel neuraal netwerk (CNN)?
Een Convolutional Neural Network (CNN) is een soort deep learning neuraal netwerk dat zeer geschikt is voor beeld- en videoanalyse. CNN's gebruiken een reeks convolutie- en poolinglagen om kenmerken uit afbeeldingen en video's te extraheren, en gebruiken deze kenmerken vervolgens om objecten of scènes te classificeren of te detecteren.
2: Hoe werken CNN's?
CNN's werken door een reeks convolutie- en poolinglagen toe te passen op een invoerafbeelding of -video. Convolutielagen extraheren kenmerken uit de invoer door een klein filter, of kernel, over de afbeelding of video te schuiven en het puntproduct tussen het filter en de invoer te berekenen. Het samenvoegen van lagen downsampelt vervolgens de uitvoer van de convolutielagen om de dimensionaliteit van de gegevens te verminderen en deze rekenkundig efficiënter te maken.
3: Wat zijn enkele veelvoorkomende activeringsfuncties die in CNN's worden gebruikt?
Enkele veel voorkomende activeringsfuncties die in CNN's worden gebruikt, zijn onder meer:
- Rectified Linear Unit (ReLU): ReLU is een niet-verzadigende activeringsfunctie die rekenkundig efficiënt is en gemakkelijk te trainen.
- Leaky Rectified Linear Unit (Leaky ReLU): Leaky ReLU is een variant van ReLU waarmee een kleine hoeveelheid negatieve gradiënt door het netwerk kan stromen. Dit kan helpen voorkomen dat het netwerk tijdens de training doodgaat.
- Parametrische Rectified Linear Unit (PReLU): PReLU is een generalisatie van Leaky ReLU waarmee de helling van de negatieve gradiënt kan worden geleerd.
4: Wat is het doel van het gebruik van meerdere convolutielagen in een CNN?
Door meerdere convolutielagen in een CNN te gebruiken, kan het netwerk steeds complexere kenmerken leren van de invoerafbeelding of -video. De eerste convolutielagen leren eenvoudige kenmerken, zoals randen en hoeken. De diepere convolutielagen leren complexere kenmerken, zoals vormen en objecten.
5: Wat zijn enkele veelgebruikte regularisatietechnieken die in CNN’s worden gebruikt?
Er worden regularisatietechnieken gebruikt om te voorkomen dat CNN’s de trainingsgegevens overbelasten. Enkele veel voorkomende regularisatietechnieken die in CNN's worden gebruikt, zijn onder meer:
- Uitval: Uitval laat tijdens de training willekeurig neuronen uit het netwerk vallen. Dit dwingt het netwerk om robuustere kenmerken te leren die niet afhankelijk zijn van een enkel neuron.
- L1-regularisatie: L1-regularisatie regulariseert de absolute waarde van de gewichten in het netwerk. Dit kan helpen het aantal gewichten te verminderen en het netwerk efficiënter te maken.
- L2-regularisatie: L2-regularisatie regulariseert het kwadraat van de gewichten in het netwerk. Dit kan ook helpen om het aantal gewichten te verminderen en het netwerk efficiënter te maken.
6: Wat is het verschil tussen een convolutielaag en een poolinglaag?
Een convolutielaag extraheert kenmerken uit een invoerafbeelding of -video, terwijl een poolinglaag de uitvoer van de convolutielagen downsampelt. Convolutielagen gebruiken een reeks filters om objecten te extraheren, terwijl poollagen verschillende technieken gebruiken om de gegevens te downsamplen, zoals maximale pooling en gemiddelde pooling.