Kijk eerst de sheets en de bijbehorende video 1/2 en video 2/2.
Het is de bedoeling een eenvoudig Neuraal netwerk (NN) te programmeren met één verborgen laag dat simpele Booleaanse functies, zoals XOR, kan leren.
Maak een netwerk voor 2-inputs (X)OR- en AND-problemen. Houd het wel algemeen.
Gebruik het skelet-programma
en bekijk deze hints.
Zorg er altijd voor dat de voorbeelden in random volgorde
worden aangeboden.
Bestudeer de verschillen, gebruik verschillende leersnelheden, activatiefuncties, aantallen verborgen knopen, epochs, etcetera. Wanneer gaat het fout? Is er verschil tussen OR en XOR?
Leg duidelijk uit over welke fout gerapporteerd wordt.
Rapporteer ook over een "serieuze" dataset, zoals Abalone, met 4177 voorbeelden en per voorbeeld acht attributen en een negende om te voorspellen;
deze schelpen-dataset is afkomstig van de UCI Machine Learning repository.
(Een andere dataset mag ook, dat kan tot een bonus aanleiding geven.)
Vanuit de skeletcode kan eenvoudig deze versie worden ingelezen
(in de eerste kolom uit de originele dataset is M door 1.0, F door 0.5 en I door 0.0 vervangen; komma's zijn
door spaties vervangen).
Misschien is het verstandig de target tussen 0 en 1 te dwingen (deel bij het inlezen dat negende attribuut door 30.0).
Voor gnuplot zie bij de vorige opgaven.
Leg in het verslag ook kort BackPropagation uit, met de formules (geen bewijs),
en uiteraard een referentie naar het juiste hoofdstuk in Russell en Norvig.
En een referentie voor de dataset.
In te leveren per e-mail: verslag (in LaTeX gemaakt; de eigen C++-code als Appendix,
zie verder
hier
voor opmerkingen over het verslag),
en C++-code.
Deadline: dinsdag 18 mei 2021, 17:00 uur.
Vragen en/of opmerkingen kunnen worden gestuurd naar: aicollege@liacs.leidenuniv.nl.
21 april 2021 — https://www.liacs.leidenuniv.nl/~kosterswa/AI/nn21.html