基于身高体重的brain.js成人/儿童识别示例搭建技术咨询
用brain.js实现成人/儿童识别的简易神经网络
Hey,我正在捣鼓brain.js的简易示例,想搞明白它的运行逻辑,参考了某教程5分10秒左右的成人/儿童识别案例,目前写的代码是这样的:
var brain = require("brain.js"); const network = new brain.NeuralNetwork(); network.train([ {input:{height:1, weight:20},output:{adult:0}}, {input:{height:2, weight:40},output:{adult:0}}, {input:{height:3, weight:60},output:{adult:0}}, {input:{height:4, weight:80},output:{adult:0}}, {input:{height:5, weight:100},output:{adult:0}}, // 这里还需要补充成人的样本数据哦! ]);
几个关键的补充点(避免踩坑):
- 样本要均衡:目前只有儿童(
adult:0)的样本,必须添加对应的成人(adult:1)数据,比如身高6、体重150这类符合成人特征的输入,不然模型根本学不出区分规则 - 数据归一化更靠谱:直接用原始的身高体重数值可能导致模型收敛慢,建议把数值缩到0-1的范围,比如身高除以8,体重除以200,这样模型训练效率会更高
- 别忘了测试模型:训练完之后,一定要用
network.run()传入测试数据,比如{height:5.5, weight:130},看看输出的adult概率是不是符合预期 - 调整训练参数:如果模型效果不好,可以给
train()方法加配置,比如network.train(data, { iterations: 10000, errorThresh: 0.0001 }),增加迭代次数或者降低误差阈值
比如补充完整后的代码大概是这样:
var brain = require("brain.js"); const network = new brain.NeuralNetwork(); // 归一化处理后的数据 const trainingData = [ {input:{height:1/8, weight:20/200},output:{adult:0}}, {input:{height:2/8, weight:40/200},output:{adult:0}}, {input:{height:3/8, weight:60/200},output:{adult:0}}, {input:{height:4/8, weight:80/200},output:{adult:0}}, {input:{height:5/8, weight:100/200},output:{adult:0}}, {input:{height:6/8, weight:150/200},output:{adult:1}}, {input:{height:7/8, weight:180/200},output:{adult:1}}, {input:{height:8/8, weight:200/200},output:{adult:1}} ]; // 带参数训练 network.train(trainingData, { iterations: 20000, errorThresh: 0.00001, log: (stats) => console.log(stats) // 可以查看训练过程的误差变化 }); // 测试 const testResult = network.run({height:5.5/8, weight:130/200}); console.log(`成人概率:${testResult.adult.toFixed(4)}`);
这样跑起来应该就能得到比较合理的识别结果啦!
内容的提问来源于stack exchange,提问作者Nick Manning
相关产品推荐
相关产品推荐

