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
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
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: