neural netwerk bouwen, van data voorzien, trainen en testen. terug naar de inleiding
werkwijze hoe het model te voorzien van data , trainen en testen
1) Ga naar de schets in fullscreen en open het console.
2) Begin, in het blauwe venster, met muisklikken een verzameling objecten te maken dit zijn objecten met het label 'C' (regel 3)
3) Nu met een cijfer (muv de 't') of getal een volgend label aanmaken (zie regel 27 en 43) en met muisklikken een tweede verzameling aanmaken.
4) Door de 't' toets in te drukken het model trainen. Het trainingsvenster verschijnt en je zie, met de toename van het aantal epoch, de loss afnemen.
5) Het model testen door met muisklikken een object aan de verzamelingen toe te voegen rechts verschijnen arrays met labels en de zekerheid.
De blauwe cirkeltjes zijn gekoppeld aan cel '0' van het array (regel 73). Cel '0' bevat het label met de hoogste zekerheid.
enkele opmerkingen over de code
In regel 15 wordt het object "model" van het netwerk, met twee options, aangemaakt.
In "model.addData" (regel 44) wordt de data aan het netwerk gegeven.
De input data is de x en y positie van de cirkels (regel 40) aan deze cirkels worden de labels gekoppeld. (regel 43)
De labels worden in regel 27 met een toets aangemaakt (toets 't; kan je natuurlijk niet als label gebruiken)
Zo wordt ook het aantal inputs en outputs van het netwerk vastgelegd (regel 10 en 11 zijn daarom overbodig)
Na het indrukken van toets 't' wordt het model getrained (regel 19)
Ingesteld met 100 epochs dwz het netwerk wordt 100 keer doorlopen om zo de gewichten zo goed mogelijk bij te stellen
Na het trainen ontstaat de prediction toestand en wordt in regel 56 de ingevoerde data geclassificeerd.
Bronnen
Youtube tutorial van Daniel Shiffman "Train Your Own Neural Network"
ml5 website het artikel "NeuralNetwork"
let model;
let targetLabel = 'C';
let toestand = 'collection';
function setup() {
createCanvas(400, 600);
background(230,251,255);
let options = {
//inputs: ['x' , 'y'],
//outputs: ['label'],
task: 'classification',
debug: 'true' //toont de training grafiek in het console
};
model = ml5.neuralNetwork(options);
}
function keyPressed() {
if(key == 't') {
toestand = 'training';
model.normalizeData(); //zodat alle input data wordt genormaliseerd tussen 0 en 1
let options = {epochs: 100}
model.train(options, whileTraining, finishedTraining);
}
else
{
targetLabel = key.toUpperCase();
}
}
function whileTraining(epoch, loss) {
console.log(epoch);
}
function finishedTraining() {
console.log('finished training.');
toestand = 'prediction'
}
function mousePressed() {
let inputs = {x: mouseX, y: mouseY }
if (toestand == 'collection') {
let labels = {labels: targetLabel}
model.addData(inputs,labels);
//onderstaande code maakt de objecten zichtbaar
stroke(0);
strokeWeight(2);
fill(255,0,0,50);
ellipse(mouseX, mouseY, 24);
fill(255,0,0);
noStroke();
textAlign(CENTER,CENTER);
text(targetLabel, mouseX, mouseY);
} else if (toestand == 'prediction') {
model.classify(inputs, gotResults);
}
}
function gotResults(error, results) {
if (error) {
console.error(error) ;
return;
}
console.log(results);
stroke(0);
strokeWeight(2);
fill(0, 0, 255,50);
ellipse(mouseX, mouseY, 24);
fill(100,0,255);
noStroke();
textAlign(CENTER);
text(results[0].label, mouseX, mouseY);
}