ml5.js入门一(介绍)+NeuralNetwork神经网络

ml5.js

一 ,ml5.js是什么

ml5.js 它是基于Tensorflow.js的一个非常简便易用的接口,目的是让更广泛的受众更容易使用机器学习。(演示都是根据官网实例demo)

二,功能介绍(建议大家结合官方文档食用)

交流群:811710917
ml5.js主要分为三个方面

  1. 图像:
    图像分类器姿势网身体像素积卷神经手势,面网,人脸接口,风格转移,像素对像素,CVAE,DCGAN,草图RNN,物体检测器
  2. 声音:
    声音分类,音高检测
  3. 文本:
    字符RNN
    情绪
    Word2Vec

在学习他们之前首先需要了解

NeuralNetwork神经网络

创建您自己的神经网络并在浏览器中使用ml5.neuralNetwork. 收集数据以训练您的神经网络或使用现有数据实时训练您的神经网络。一旦经过训练,您的神经网络就可以执行classification或regression执行任务。

——分类classification:这里是一个输入rgb判断是什么颜色的demo
<html>

<head>
  <meta charset="UTF-8">
  <title>Image classification using MobileNet and p5.js</title>
  
  <script src="../p5.min.js"></script>
  <script src="../ml5.js"></script>
</head>

<body>
  <!-- 分类 -->
  <script src="./script.js"></script>
  <!-- 回归 -->
  <!-- <script src="./script2.js"></script> -->
  <!-- XOR -->
  <!-- <script src="./XOR.js"></script> -->
  <!-- pose -->
  <!-- <script src="./pose.js"></script> -->
</body>

</html>

{"data": [
  {"r":255, "g":0, "b":0 ,"color": "red-ish"},
  {"r":256, "g":0, "b":0 ,"color": "red-ish"},
  {"r":254, "g":0, "b":0 ,"color": "red-ish"},
  {"r":0, "g":254, "b":0 ,"color": "green-ish"},
  {"r":0, "g":255, "b":0 ,"color": "green-ish"},
  {"r":0, "g":256, "b":0 ,"color": "green-ish"},
  {"r":0, "g":0, "b":254 ,"color": "blue-ish"},
  {"r":0, "g":0, "b":255 ,"color": "blue-ish"},
  {"r":0, "g":0, "b":256 ,"color": "blue-ish"}
] }
// ./script.js
/**加载外面的数据 */
// 1 加载外部json设置
const options = {
  dataUrl: 'data.json',
  inputs: ['r', 'g', 'b'],
  outputs: ['color'],
  task: 'classification', // classification分类:yes/no : regression回归:估计值是否接近一个范围
  debug:true
}
// 2 初始化你的神经网络
const nn = ml5.neuralNetwork(options, dataLoaded)
// 3 序列化数据,然后训练他
function dataLoaded (){
  nn.normalizeData()
  trainModel()
}
// 4 训练 模型
function trainModel() {
  const trainingOptions = {
    epochs:32,
    batchSize: 12
  }
  nn.train(trainingOptions, finishedTraining)
}
// 5 使用训练好的模型
function finishedTraining (){
  classify()
}
// 6 定义一个分类器
function classify(){
// 这里是所需要判断的值
  const input = {
    r:255,
    g:0,
    b:0
  }
  nn.classify(input, handleResults)
}
// 7 给分类器 一个回调函数
function handleResults (error, result) {
  if(error){
    console.error(error);
    return
  }
  console.log(result);
}

/**加载现有的数据 */
// // Step 1: 加载数据
// const data = [
//   {r:255, g:0, b:0, color:'red-ish'},
//   {r:254, g:0, b:0, color:'red-ish'},
//   {r:253, g:0, b:0, color:'red-ish'},
//   {r:0, g:255, b:0, color:'green-ish'},
//   {r:0, g:254, b:0, color:'green-ish'},
//   {r:0, g:253, b:0, color:'green-ish'},
//   {r:0, g:0, b:255, color:'blue-ish'},
//   {r:0, g:0, b:254, color:'blue-ish'},
//   {r:0, g:0, b:253, color:'blue-ish'}
// ];

// // Step 2: 神经网络设置
// const options = {
//   task: 'classification',
//   debug: true
// }

// // Step 3: 初始化神经网络
// const nn = ml5.neuralNetwork(options);

// // Step 4: 给神经网络加载数据
// data.forEach(item => {
//   const inputs = {
//     r: item.r, 
//     g: item.g, 
//     b: item.b
//   };
//   const output = {
//     color: item.color
//   };

//   nn.addData(inputs, output);
// });

// // Step 5: 序列化数据
// nn.normalizeData();

// // Step 6: 训练神经网络
// const trainingOptions = {
//   epochs: 32,
//   batchSize: 12
// }
// nn.train(trainingOptions, finishedTraining);

// // Step 7: 使用训练模型
// function finishedTraining(){
//   classify();
// }

// // Step 8: 创建一个分类器
// function classify(){
//   const input = {
//     r: 255, 
//     g: 255, 
//     b: 0
//   }
//   nn.classify(input, handleResults);
// }

// // Step 9: 给分类器定义后调函数
// function handleResults(error, result) {
//     if(error){
//       console.error(error);
//       return;
//     }
//     console.log(result); // {label: 'red', confidence: 0.8};
// }

观察运行结果,推断出输入的颜色为红色的概率为0.91(91%)

在这里插入图片描述

——regression 创建一堆小球,然后预测小球们的组合轨迹的demo

<html>

<head>
  <meta charset="UTF-8">
  <title>Image classification using MobileNet and p5.js</title>
  
  <script src="../p5.min.js"></script>
  <script src="../ml5.js"></script>
</head>

<body>
  <!-- 分类 -->
  <!-- <script src="./script.js"></script> -->
  <!-- 回归 -->
  <script src="./script2.js"></script>
  <!-- XOR -->
  <!-- <script src="./XOR.js"></script> -->
  <!-- pose -->
  <!-- <script src="./pose.js"></script> -->
</body>

</html>
// ./script2.js
let nn;
let counter = 0;

const options = {
  task: "regression",// 回归
  debug: true,
};

// 创建预测数据
function createTrainingData() {
  for (let i = 0; i < width; i += 10) {
    const iters = floor(random(5, 20));
    const spread = 50;
    for (let j = 0; j < iters; j += 1) {
      const data = [i, height - i + floor(random(-spread, spread))];
      fill(0, 0, 255);
      ellipse(data[0], data[1], 10, 10);
      // 给神经添加训练数据
      nn.addData([data[0]], [data[1]]);
    }
  }
}
// p5.js 特有的函数,加载完毕后会自动调用一次
function setup() {
  // 创建一个画布
  createCanvas(400, 400);
  // 初始化神经网络
  nn = ml5.neuralNetwork(options);

  console.log(nn);
  // 创建训练数据
  createTrainingData();
  // 数据序列化 ——》200-》2
  nn.normalizeData();
  // 训练参数
  const trainingOptions = {
    batchSize: 24,// 单次训练批次数量
    epochs: 10,// 训练批次
  };
  // 训练神经网络
  nn.train(trainingOptions, finishedTraining); // 小提示ml5支持promise
}
// 完成训练后调用的回调函数
function finishedTraining() {
  if (counter < 400) {
    // classification调用的是classify()
    // regression调用的是predict()
    // 预测
    nn.predict([counter], (err, results) => {
      if (err) {
        console.log(err);
        return;
      }
      console.log(results[0]);
      const prediction = results[0];
      const x = counter;
      const y = prediction.value;
      fill(255, 0, 0);
      rectMode(CENTER);
      rect(x, y, 10, 10);

      counter += 1;
      finishedTraining();
    });
  }
}

效果
在这里插入图片描述

第一篇就先写到这里吧 下一篇 FeatureExtractor特征提取

需要素材找我就行了haha

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值