Convolutional Neural Network

Wat is Convolutional Neural Network?

Een Convolutional Neural Network (CNN) is een methode om bepaalde aspecten binnen een foto te herkennen. Door middel van filters haalt het stukjes uit een foto om dingen zoals randen of vormen te herkennen door middel van filters. Hoe dieper de convolutional layer en hoe geadvanceerde de filters, hoe meer er herkent van worden. Zo kun je gaan van randen herkennen naar hoeken herkennen, of bijvoorbeeld cirkels. Zodra dit netwerk geavanceerd genoeg is kan het ook dingen gaan herkennen zoals honden of gezichten, hier kan dan een classificatie aan gegeven worden van hetgeen dat herkend wordt.


Voor Dit project is het dus de bedoeling dat door middel van CNN een gezicht herkend wordt, hij kijkt naar bepaalde aspecten van het gezicht en op deze manier een classificatie kan geven aan de emotie die wordt weergegeven. Door middel van filters van bijvoorbeeld 3x3 pixels wordt van de input een nieuwe output gemaakt en dus een nieuwe convolutional layer. Deze 3x3 filter wordt bij de input op elke groep van 3x3 pixels vergeleken, en deze wordt dat in nieuwe groep van 1x1 gestopt zoals weergegeven in afbeelding 1

filters cnn layers

Op onderstaande afbeelding is dan ook te zien hij CNN een stukje van een afbeelding/foto pakt en deze steeds kleiner maakt en van 1 input weer een nieuwe output maakt

cnn layers


Hoe train je een Convolutional Neural Network?

Om CNN te gebruiken moeten we weten hoe we een CNN kunnen trainen. Hier beschrijven we in stappen hoe we tot een volledige trainingspijplijn kunnen komen. De stappen zijn: hoe een CNN te trainen, inclusief het afleiden van gradiënten, het implementeren van backprop vanaf het begin (met alleen numpy), en uiteindelijk bouwen van een volledige trainingspijplijn. Het trainen van een neuraal netwerk bestaat doorgaans uit twee fasen:

  1. Een voorwaartse fase, waarbij de invoer volledig door het netwerk gaat.
  2. Een achterwaartse fase, waarin gradiënten worden backpropagated (backprop) en gewichten worden bijgewerkt.

We zullen dit patroon volgen om onze CNN te trainen. Er zijn ook twee belangrijke implementatie specifieke ideeën die we zullen gebruiken: Tijdens de voorwaartse fase zal elke laag alle gegevens (zoals invoer, tussenliggende waarden, enz.) Die nodig zijn voor de achterwaartse fase in de cache opslaan. Dit betekent dat elke achterwaartse fase moet worden voorafgegaan door een overeenkomstige voorwaartse fase. Tijdens de achterwaartse fase krijgt elke laag een gradiënt en geeft hij ook een gradiënt terug. Het ontvangt de gradiënt van verlies met betrekking tot zijn uitgangen (∂L / ∂out) en retourneert de gradiënt van verlies met betrekking tot zijn inputs (∂L / ∂in).