|
Het MobileNet model trainen, transfer learing met regressie. terug naar de inleiding
In deze schets wordt het object "predictor" aangemaakt, een object van de featureExtractor class "regression" class. (regel 13)
Dit herhalen met andere object posities en getallen. Als de dataset compleet is op de trainer knop klikken.
callbacks zie de w3 school
In de schets wordt de callback op twee manieren gebruikt
Van de data in result wordt alleen de data in value gebruikt . Deze data wordt met de dot notatie "result.value" aan preds gegeven (regel 61)
Zo kom je te weten dat het getal gekoppeld aan het videobeeld in de variabele "value" zit.
foutmelding
let featureExtractor;
let predictor, video, slider, getal;
let preds = 0;
function setup() {
createCanvas(540, 380);
video = createCapture(VIDEO);
video.hide();
background(0);
//Het model laden dat geschikt is om kenmerken te veranderen
featureExtractor = ml5.featureExtractor('MobileNet', modelGeladen);
predictor = featureExtractor.regression(video, videoReady);
//telkens als het knopje wordt ingedrukt wordt een afbeelding
//met een getal tussen 0 en 1 aan addImage toegevoegd
slider = createSlider(0, 1, 0.5, 0.01);
addKnop = createButton('afbeelding en getal toevoegen')
addKnop.mousePressed(function() { //alweer een anonymous functie
predictor.addImage(slider.value());
});
trainknop = createButton('trainer');
trainknop.mousePressed(function() {
predictor.train(training);
});
opslaanknop = createButton('model downloaden');
opslaanknop.mousePressed(function()
{predictor.save();
});
}
function modelGeladen(){
console.log('het model is geladen');
}
function videoReady() {
console.log('De video is klaar');
}
//Als de training compleet is wordt de predictor gestart en de toonResult functie uitgevoerd
//de loss functie berekend de error
function training(loss){
if (loss == null) {
console.log('voorspelling complete');
predictor.predict(toonResult);
} else {
console.log(loss);
}
}
//toonResult is een loop die het getal in "preds" weergeeft
//dat het meeste bij het videobeeld past.
function toonResult(error, result) {
if (error){
console.error(error);
} else {
//console.log(result);
predictor.predict(toonResult);
preds = result.value;
}
}
function draw(){
background(0);
getal = slider.value();
//de afbeelding is korter dan het canvas zo verschijnt de tekst in een zwarte band
image(video,0,0,540,340);
fill(255);
textSize(20);
text("toegevoegd getal: ",10, height-15);
text(getal,180, height-15);
text("gekoppelde getal: ",230, height-15);
preds = round(preds, 2); //een cijfer achter de komma
text(preds,400, height-15);
}