我在按照ML5.js特征提取器的基本示例进行操作。我没有使用视频。在加载模型后,我向其中添加了新的图像,然后再次进行训练。我得到了以下错误:
Mobilenet.js:323 Uncaught (in promise) Error: 批次大小为0或NaN。请选择一个非零分数。 at t. (Mobilenet.js:323)
我的代码看起来是正确的,根据文档 – 使用视频是可选的,所以我期望在手动添加图像后应该能够重新训练模型。我使用了addImage
函数的回调,以确保在调用train
之前图像确实已添加。
let added = 0let classifierlet featureExtractor = ml5.featureExtractor('MobileNet', modelLoaded)function modelLoaded() { classifier = featureExtractor.classification() classifier.addImage(document.getElementById('person1'), 'nomask', addedImage) classifier.addImage(document.getElementById('mask1'), 'mask', addedImage)}// 这会被调用两次,但然后train就出错了function addedImage(){ added++ if(added == 2){ classifier.train((lossValue) => { console.log('Loss is', lossValue); })}
回答:
您需要至少添加3张图像才能进行训练。
以下代码应该可以工作。
let added = 0;let classifier;let featureExtractor = ml5.featureExtractor('MobileNet', modelLoaded);function modelLoaded() { classifier = featureExtractor.classification() classifier.addImage(document.getElementById('person1'), 'nomask', addedImage); classifier.addImage(document.getElementById('person2'), 'nomask', addedImage); classifier.addImage(document.getElementById('mask1'), 'mask', addedImage);}function addedImage(){ added++; if(added == 3){ classifier.train((lossValue) => { console.log('Loss is', lossValue); });}
一个工作示例:https://glitch.com/edit/#!/ml5-feature-extractor-addimage