Zephyrnet-logo

Basisinleiding tot convolutief neuraal netwerk bij diep leren

Datum:

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

Het gebied van Deep Learning heeft de afgelopen decennia het gevolg van het efficiënt aanpakken van enorme datasets en het maken van computersystemen die capabel genoeg zijn om computationele problemen op te lossen

Verborgen lagen hebben een nieuw tijdperk ingeluid, waarbij de oude technieken niet efficiënt waren

Bron: Medium.com

  1. Achtergrond van CNN's
  2. Wat is CNN
  3. De basisarchitectuur van CNN
  4. Het convolutionele neurale netwerk trainen
  5. Beperkingen
  6. Code-implementatie voor het implementeren van CNN voor beelddetectie
  7. Conclusie

Achtergrond van CNN's

Rond de jaren tachtig werden voor het eerst CNN's ontwikkeld en ingezet. Een CNN kon destijds alleen handgeschreven cijfers detecteren. CNN werd voornamelijk in verschillende gebieden gebruikt om postcodes en pincodes te lezen, enz.

Het meest voorkomende aspect van elk AI-model is dat het een enorme hoeveelheid gegevens vereist om te trainen. Dit was een van de grootste problemen waarmee CNN destijds te maken had, en daarom werden ze alleen in de postindustrie gebruikt. Yann LeCun was de eerste die convolutionele neurale netwerken introduceerde.

Kunihiko Fukushima, een gerenommeerde Japanse wetenschapper, die zelfs herkenning uitvond, een heel eenvoudig neuraal netwerk dat wordt gebruikt voor beeldidentificatie, had zich ontwikkeld op het werk dat eerder door LeCun was gedaan

Wat is CNN?

Op het gebied van diep leren behoort het convolutionele neurale netwerk (CNN) tot de klasse van diepe neurale netwerken, die vooral werd ingezet op het gebied van analyse/beeldherkenning.

Convolutional Neural gebruikt een heel speciaal soort methode die bekend staat als Convolution.

De wiskundige definitie van convolutie is een wiskundige bewerking die wordt toegepast op de twee functies die uitvoer geven in een vorm van een derde functie die laat zien hoe de vorm van de ene functie wordt beïnvloed, gewijzigd door de andere functie.

Bron: Towardsdatascience

De convolutionele neurale netwerken (CNN) bestaan ​​uit verschillende lagen kunstmatige neuronen. Kunstmatige neuronen, vergelijkbaar met die neuroncellen die door het menselijk brein worden gebruikt voor het doorgeven van verschillende sensorische inputsignalen en andere reacties, zijn wiskundige functies die worden gebruikt voor het berekenen van de som van verschillende inputs en het geven van output in de vorm van een activeringswaarde.

Het gedrag van elk CNN-neuron wordt bepaald door de waarde van zijn gewichten. Wanneer ze worden gevoed met de waarden (van de pixel), herkennen de kunstmatige neuronen van een CNN verschillende visuele kenmerken en specificaties.

Wanneer we een invoerafbeelding aan een CNN geven, genereert elk van de binnenste lagen verschillende activeringskaarten. Activeringskaarten wijzen op de relevante kenmerken van de gegeven invoerafbeelding. Elk van de CNN-neuronen neemt over het algemeen invoer in de vorm van een groep/patch van de pixel, vermenigvuldigt hun waarden (kleuren) met de waarde van de gewichten, telt ze op en voert ze in via de respectieve activeringsfunctie.

De eerste (of misschien de onderste) laag van de CNN herkent meestal de verschillende kenmerken van het invoerbeeld, zoals randen horizontaal, verticaal en diagonaal.

De uitvoer van de eerste laag wordt ingevoerd als invoer voor de volgende laag, die op zijn beurt andere complexe kenmerken van het invoerbeeld zal extraheren, zoals hoeken en combinaties van randen.

Hoe dieper men zich in het convolutionele neurale netwerk begeeft, hoe meer de lagen verschillende functies op een hoger niveau gaan detecteren, zoals objecten, gezichten, enz.

De basisarchitectuur van CNN

Een CNN-architectuur bestaat uit twee belangrijke componenten:

• Een convolutietool die de verschillende kenmerken van een afbeelding scheidt en identificeert voor analyse in een proces dat bekend staat als Feature Extraction

• Een volledig verbonden laag die de uitvoer van het convolutieproces overneemt en de klasse van de afbeelding voorspelt op basis van de eerder opgehaalde kenmerken.

Het CNN bestaat uit drie soorten lagen: convolutionele lagen, poolinglagen en volledig verbonden (FC) lagen.

bron: Upgrade.com

Convolutielagen

Dit is de allereerste laag in de CNN die verantwoordelijk is voor het extraheren van de verschillende functies uit de invoerafbeeldingen. De wiskundige convolutiebewerking wordt uitgevoerd tussen het invoerbeeld en een filter van een specifieke grootte MxM in deze laag.

De volledig verbonden

De volledig verbonden (FC)-laag omvat de gewichten en vooroordelen samen met de neuronen en wordt gebruikt om de neuronen tussen twee afzonderlijke lagen te verbinden. De laatste verschillende lagen van een CNN-architectuur worden meestal vóór de uitvoerlaag geplaatst.

pooling laag

De pooling-laag is verantwoordelijk voor het verkleinen van de (ruimtelijke) omvang van het convolved feature. Deze afname van de rekenkracht is nodig om de gegevens te verwerken door een aanzienlijke reductie van de afmetingen.
Er zijn twee soorten poolen:
1 gemiddeld poolen
2 maximaal poolen.

Een poolinglaag wordt meestal aangebracht na een convolutionele laag. Het belangrijkste doel van deze laag is om de grootte van de kaart met geconvolueerde objecten te verkleinen om de rekenkosten te verminderen. Dit wordt bereikt door de verbindingen tussen lagen te verminderen en onafhankelijk te werken op elke feature map. Er zijn verschillende soorten pooling-operaties, afhankelijk van het gebruikte mechanisme.

Bron: Analytics Vidhya.com 

Het grootste element wordt verkregen uit de functiekaart in Max Pooling. Het gemiddelde van de elementen in een vooraf gedefinieerd afbeeldingssegment met afmetingen wordt berekend met behulp van gemiddelde pooling. Sum Pooling berekent de totale som van de componenten in de vooraf gedefinieerde sectie. De poolinglaag wordt meestal gebruikt om de convolutionele laag en de FC-laag te verbinden.

Afvaller

Om overfitting te voorkomen (wanneer een model goed presteert op trainingsgegevens maar niet op nieuwe gegevens), wordt een dropout-laag gebruikt, waarbij tijdens de trainingsfase enkele neuronen uit het neurale netwerk worden verwijderd, wat resulteert in een kleiner model.

Activeringsfuncties

Ze worden gebruikt om elke vorm van netwerkvariabele-naar-variabele-associatie te leren en te benaderen die zowel continu als complex is.

Het geeft het netwerk niet-lineariteit. De ReLU, Softmax en tanH zijn enkele van de meest gebruikte activeringsfuncties.

Het convolutionele neurale netwerk trainen

Het proces van het aanpassen van de waarde van de gewichten wordt gedefinieerd als de "training" van het neurale netwerk.

Ten eerste begint de CNN met de willekeurige gewichten. Tijdens de training van CNN wordt het neurale netwerk gevoed met een grote dataset van afbeeldingen die worden gelabeld met de bijbehorende klasselabels (kat, hond, paard, enz.). Het CNN-netwerk verwerkt elke afbeelding waarbij de waarden willekeurig worden toegewezen en maakt vervolgens vergelijkingen met het klasselabel van de invoerafbeelding.

Als de uitvoer niet overeenkomt met het klasselabel (wat meestal in eerste instantie aan het begin van het trainingsproces gebeurt en daarom een ​​respectieve kleine aanpassing aan de gewichten van de CNN-neuronen maakt, zodat de uitvoer correct overeenkomt met de afbeelding van het klasselabel.

Bron: Medium.com

De correcties op de waarde van gewichten worden gedaan door middel van een techniek die bekend staat als backpropagation. Backpropagation optimaliseert het afstemmingsproces en maakt het gemakkelijker voor aanpassingen voor een betere nauwkeurigheid. Elke run van de training van de afbeeldingsgegevensset wordt een "tijdperk" genoemd.

De CNN doorloopt verschillende reeksen tijdperken tijdens het trainingsproces en past zijn gewichten aan volgens de vereiste kleine hoeveelheden.

Na elke epoch-stap wordt het neurale netwerk een beetje nauwkeuriger in het classificeren en correct voorspellen van de klasse van de trainingsafbeeldingen. Naarmate de CNN verbetert, worden de aanpassingen aan de gewichten dienovereenkomstig kleiner en kleiner.

Na het trainen van de CNN gebruiken we een testdataset om de nauwkeurigheid te verifiëren. De testdataset is een set gelabelde afbeeldingen die niet werden opgenomen in het trainingsproces. Elke afbeelding wordt naar CNN gestuurd en de uitvoer wordt vergeleken met het daadwerkelijke klasselabel van de testafbeelding. In wezen evalueert de testdataset de voorspellingsprestaties van de CNN

Als een CNN-nauwkeurigheid goed is voor zijn trainingsgegevens, maar slecht voor de testgegevens, wordt dit als "overfitting" genoemd. Dit gebeurt vanwege de kleinere omvang van de dataset (training)

Beperkingen

Zij (CNN) gebruiken enorme rekenkracht en middelen voor het herkennen van verschillende visuele patronen/trends die met het menselijk oog vrijwel onmogelijk te bereiken zijn.

Je hebt meestal erg veel tijd nodig om een ​​convolutioneel neuraal netwerk te trainen, vooral met een grote omvang aan beelddatasets.

Je hebt over het algemeen zeer gespecialiseerde hardware (zoals een GPU) nodig om de training van de dataset uit te voeren

 

Python Code-implementatie voor het implementeren van CNN voor classificatie

 

Relevante bibliotheken importeren

importeer NumPy als np %matplotlib inline import matplotlib.image als mpimg importeer matplotlib.pyplot als plt importeer TensorFlow als tf tf.compat.v1.set_random_seed(2019)

MNIST-gegevensset laden

(X_trein,Y_trein),(X_test,Y_test) = keras.datasets.mnist.load_data() 

De gegevens schalen

X_train = X_train / 255 X_test = X_test / 255 
#afvlakking
X_train_flattened = X_train.reshape(len(X_train), 28*28) X_test_flattened = X_test.reshape(len(X_test), 28*28)


Het neurale netwerk ontwerpen

model = keras.Sequential([ keras.layers.Dense(10, input_shape=(784,), activatie='sigmoid') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=[' nauwkeurigheid']) model.fit(X_train_flattened, Y_train, epochs=5)

Output:

Epoch 1/5 1875/1875 [==============================] - 8s 4ms/stap - verlies: 0.7187 - nauwkeurigheid : 0.8141 Epoch 2/5 1875/1875 [==============================] - 6s 3ms/stap - verlies: 0.3122 - nauwkeurigheid: 0.9128 Epoch 3/5 1875/1875 [==============================] - 6s 3ms/stap - verlies : 0.2908 - nauwkeurigheid: 0.9187 Epoch 4/5 1875/1875 [==============================] - 6s 3ms/stap - verlies: 0.2783 - nauwkeurigheid: 0.9229 Epoch 5/5 1875/1875 [==============================] - 6s 3ms /step - verlies: 0.2643 - nauwkeurigheid: 0.9262

 

Verwarringsmatrix voor visualisatie van voorspellingen

 

Y_predict = model.predict(X_test_flattened) Y_predict_labels = [np.argmax(i) voor i in Y_predict]

cm = tf.math.confusion_matrix(labels=Y_test,predictions=Y_predict_labels) %matplotlib inline plt.figure(figsize = (10,7)) sn.heatmap(cm, annot=True, fmt='d') plt.xlabel ('Voorspeld') plt.ylabel('Truth')

uitgang

Bron: auteur 

Conclusie

Dus in dit artikel hebben we de basisintroductie over CNN-architectuur en de basisimplementatie ervan in realtime scenario's zoals classificatie behandeld. We hebben ook andere belangrijke terminologieën met betrekking tot CNN behandeld, zoals pooling, activeringsfunctie, dropoutetc. We hebben ook gesproken over beperkingen met betrekking tot CNN en de training van CNN

.
Hallo allemaal, Namasté

Mijn naam is Pranshu Sharma en ik ben een liefhebber van datawetenschap

Heel erg bedankt voor het nemen van je kostbare tijd om deze blog te lezen. Voel je vrij om op een fout te wijzen (ik ben tenslotte een leerling) en respectieve feedback te geven of een opmerking achter te laten.
Dhanyvaad!!
feedback:
E-mail: [e-mail beveiligd]

De media die in dit artikel worden getoond, zijn geen eigendom van Analytics Vidhya en worden gebruikt naar goeddunken van de auteur

spot_img

Laatste intelligentie

spot_img