使用ml5.js创建图像分类神经网络时出现oneHot错误求助
形状分类模型训练报错:oneHot depth must be >=2 解决方法
问题背景
使用ml5.js 0.6.0版本训练图像分类模型时,出现以下错误:
Uncaught Error: Error in oneHot: depth must be >=2, but it is 1 at oneHot_ (tf-core.esm.js:17:357944) at Object.oneHot (tf-core.esm.js:17:71801) at NeuralNetworkData.js:560:38 at tf-core.esm.js:17:40461 at t.scopedRun (tf-core.esm.js:17:40603) at t.tidy (tf-core.esm.js:17:40355) at Object.rn (tf-core.esm.js:17:67569) at t.value (NeuralNetworkData.js:550:15) at NeuralNetworkData.js:533:33 at Array.forEach (<anonymous>)
用户的代码如下:
const circles = [] function preload() { for(let i = 0; i < 10; i++) { let index = nf(i+1, 4, 0); circles[i] = loadImage(`/data/circle/circle${index}.png`) } } let shapeClassifier; function setup() { let options = { inputs: [128, 128, 4], task: 'imageClassification', debug: true }; shapeClassifier = ml5.neuralNetwork(options); for (let i = 0; i < circles.length; i++) { shapeClassifier.addData({ image: circles[i] }, { label: 'circle' }); } shapeClassifier.normalizeData(); shapeClassifier.train({ epochs: 50 }, () => finishedTraining()); } function finishedTraining() { console.log('finished training!'); }
错误原因
图像分类任务要求模型至少能区分2个不同类别,你当前只给模型提供了'circle'这一种类别数据。oneHot(独热编码)是ml5.js处理分类标签的方式,它需要类别数≥2才能生成有效的分类向量,因此触发报错。
解决方法
添加至少一个其他形状的数据集,比如正方形,修改后的代码示例:
const circles = [] const squares = [] // 新增正方形数据集数组 function preload() { // 加载圆形图片 for(let i = 0; i < 10; i++) { let index = nf(i+1, 4, 0); circles[i] = loadImage(`/data/circle/circle${index}.png`) } // 加载正方形图片 for(let i = 0; i < 10; i++) { let index = nf(i+1, 4, 0); squares[i] = loadImage(`/data/square/square${index}.png`) } } let shapeClassifier; function setup() { let options = { inputs: [128, 128, 4], task: 'imageClassification', debug: true }; shapeClassifier = ml5.neuralNetwork(options); // 添加圆形数据 for (let i = 0; i < circles.length; i++) { shapeClassifier.addData({ image: circles[i] }, { label: 'circle' }); } // 添加正方形数据 for (let i = 0; i < squares.length; i++) { shapeClassifier.addData({ image: squares[i] }, { label: 'square' }); } shapeClassifier.normalizeData(); shapeClassifier.train({ epochs: 50 }, () => finishedTraining()); } function finishedTraining() { console.log('finished training!'); }
注意:确保你已经准备好对应类别的图片数据集,路径和文件名要和代码中的一致。
内容的提问来源于stack exchange,提问作者Yosseuf
相关产品推荐
相关产品推荐

