vrijdag 9 september 2016

05 - EEGs - En nu trainen!

De data zit netjes omgebouwd en opgeslagen. Nu kunnen we er een NN op los gaan laten. Dat gaat mij steeds gemakkelijker af merk ik. Je bouwt toch behoorlijk wat ervaring op van al die dagen intensief code weven en fouten zoeken. Niet dat het nu makkelijk is. De lessons learned uit de voorgaande competitie was dat ik veel alerter moest zijn op bugs. Ik probeer dus regelmatig tussenresultaten te verifiëren. Met name 'snelle dataconversies', zoals even door het maximum delen om alles tussen 0 en 1 te brengen en dergelijke, even niet opletten en je werkt met lege of verstoorde data.

Eerst dus nog wat sleutelen aan de data. De afbeeldingen blijken een 'wit-waarde' van 29 te hebben. Deze zet ik om naar  0. Na omzetten naar datatype np.float32, dat geschikt is voor het werken met de grafische processor, deel ik de waarde inderdaad door het maximum zodat we een waarde tussen 0 en 1 krijgen. (In feite alleen 0 en 1 omdat de grafiekpunten allemaal het maximum, 255, waren.

Het NN moet een convolutional NN worden. We werken tenslotte met grafieken die als afbeelding 'uitgelezen' moeten worden. Ik hoop dat het karakter van de grafieken op die manier het beste uitgelezen kan worden. Hoe NN het er precies uit moet gaan zien is een beetje arbitrair. Er zijn helaas weinig eenduidige regels voor te geven. Ik baseer mij dus maar op wat voorbeelden met wat aanpassingen daar waar het mij belangrijk lijkt. Een van de afwegingen is dat het aantal input dimensies niet heel veel groter moet zijn dan het aantal train-samples. Anders zou er makkelijk 'over-fitting' plaats kunnen vinden.  Dat wil zeggen dat het model wel goed werkt voor de trainingsvoorbeelden maar geen 'generalisatie' meer doet. En daarmee dus niet geschikt om de test data te voorspellen.

Hier wordt de som van de 'X' in het blok genomen. 
Het huidige gekozen model:

Indrukwekkend nietwaar?
De resultaten zijn in eerste instantie wat teleurstellend. Er is wel sprake van een aardige, geleidelijke leercurve maar de testdata lijkt zich er weinig van aan te trekken:


Misschien dat ik te snel resultaten verwacht. Ik denk dat ik het aantal batches opvoer naar 100 en de testsize (nu 20%) wat groter maak(30%). Neemt ongeveer 20 seconde per epoch dus over een ruim half uur moeten we meer weten.





 

Geen opmerkingen:

Een reactie posten