使用 ml5.js 在 JavaScript 中实现的机器学习

2025-06-09

使用 ml5.js 在 JavaScript 中实现的机器学习

美少女战士 gif

介绍

我很高兴 JavaScript 中出现了机器学习的实现。它抽象化了训练和使用机器学习模型相关的许多复杂性。我只希望ml5.js不会在明天或下个月就过时!Python 已经成为了 #machinelearning 的现代主流语言。而且有大量的 Python 库可以实现机器学习任务。然而,JavaScript 的机器学习实现才刚刚起步。

我选择 ml5.js 作为我的“美少女战士姿势登录/登录”项目的启动脚本,因为您只需通过 CDN 引用该库即可使用其内置方法。这与引用其他库(例如 JQuery)类似。无需安装。

在项目中包含 ml5.js

<head>
<script src="https://unpkg.com/ml5@0.1.1/dist/ml5.min.js">
</script>
</head>
Enter fullscreen mode Exit fullscreen mode

ml5.js

ml5.js是一个基于浏览器的 tensorflow.js 封装器。它自称是“面向 Web 的友好型机器学习”。ml5.js在浏览器中提供预训练模型。如果您尝试从零开始进行机器学习,您可能会自行训练模型。例如,将大量输入(例如人体姿势)输入到神经网络中。随着时间的推移,神经网络会通过接收模拟/大量输入变得足够复杂,从而能够通过识别模式给出可预测、可理解的输出。这类似于大脑中的突触,随着时间的推移,突触会随着反复刺激而得到强化。本文将从技术层面进一步阐述。

用于对图像进行分类的预训练模型(例如 MobileNet)与 ml5.js 一起使用,通过将其作为参数传递给对象ml5.ImageClassifier()的方法ml5以及回调函数:

ml5.imageClassifier(MobileNet,callbackFunction);
Enter fullscreen mode Exit fullscreen mode

MobileNet 模型已使用 1500 万张图像进行训练,因此您可以想象使用预先训练好的模型比自行创建模型更有用。Ml5.js 在云端引用了此库,因此您可以在自己的项目中使用它。

可供您与 ml5.js 一起使用的一些其他预训练模型包括:

  1. PoseNet(用于检测姿势)
  2. BodyPix
  3. 人脸API
  4. YOLO
  5. 以及其他

使用 ml5.js 时,需要注意的是:“ml5.js 在所有方法中都支持错误优先回调和 Promises。” 让我们来分析一下:

  1. 错误优先回调
  2. 承诺

错误第一次回调

回调函数是指在另一个函数执行完成后执行的函数,也称为回调函数。在 JavaScript 中,函数是一个对象。这意味着你可以将一个函数作为参数传递给另一个函数。接收回调函数作为参数的函数被称为高阶函数。

通过使用回调函数,可以确保回调函数中包含的代码块在其父函数运行之前不会执行。这种想法有助于我们创建异步代码/应用程序。

如果您想练习/了解有关回调的更多信息,请阅读此工作表:

常见的语法/示例是:

function main(argument1, callbackFxn(){
}
}//end of main function
Enter fullscreen mode Exit fullscreen mode

或者您可以引用命名回调函数:

function main(argument1, hello());
Enter fullscreen mode Exit fullscreen mode

ml5.js 使用错误优先回调模式来处理异步操作。回调函数将在异步操作结束后执行,并且第一个参数为错误对象。代码如下:

ml5.methodName(ModelName, function(errorObj, someData)
{if(errorObj){
//Error executes first
} 
//some Data is returned from the pre-trained model
});

Enter fullscreen mode Exit fullscreen mode

如果没有发生错误,则errorObj对象被设置为空并返回一些数据。

承诺

JavaScript 中的 Promise 用于处理异步操作。它们是指向未来接收值的对象。Promise 是作为 ES6 规范的一部分引入的。正如您上面所读到的,异步操作可以通过回调函数完成。然而,多个回调函数的嵌套会造成混乱,并可能导致所谓的回调地狱。这种逻辑结构的目的是,如果将来某个条件满足,则运行一个函数。Promise 有三种状态:

  1. 待定(承诺状态正在进行中)
  2. 已解决(承诺成功)
  3. 被拒绝(承诺未成功)

构建承诺

使用 Promise 构造函数创建一个新的 Promise。Promise 将以回调函数作为参数,并向该函数传递两个参数:

let goodnight = new Promise(function(resolve, reject){

});
Enter fullscreen mode Exit fullscreen mode

传递给promise对象的回调函数goodnight称为执行器。resolvereject根据结果执行的函数。

例子:

let time = new Date().getHours();
let goodnight = new Promise(function(resolve, reject){
  if(time >= 20){
    resolve();
  }else{
    reject();
  }
});

Enter fullscreen mode Exit fullscreen mode

如果条件满足,则结果将被传递给执行的 resolve 函数,否则将执行以错误对象作为参数的拒绝函数。

resolve() 和 rejection() 函数不会立即执行。为了处理回调函数返回的 true/false 结果,我们使用 .then() 和 .catch() 方法。

然后抓住

goodnight
  .then(function(){
  alert('Goodnight')
})
 .catch(function(){
  alert('Not bedtime')
})
Enter fullscreen mode Exit fullscreen mode

方法是与对象关联的函数。由于 Promise 是对象,我们可以将 .then() 和 .catch() 方法附加到新创建的goodnight对象上。这些方法会执行某些操作。如果时间 >= 晚上 8 点,则其中的匿名回调函数then会提示“晚安”。否则,会提示“非就寝时间”。

返回 ml5.js

回到前面提到的 ml5.js,它提供了对各种图像、视频、声音和文本机器学习预训练模型的访问。你可以在左侧导航栏中看到大部分模型

每个预先训练的模型都带有:

  1. 参数:在预训练模型初始化期间传递。预训练模型的名称是必需的。例如,MobileNet、PoseNet。其他参数(例如回调函数、视频、图像等)是可选的,取决于您选择的模型。
  2. 属性:这些是可选的
  3. 方法:这些方法用于处理数据,例如,detect() 将检测人脸。PoseNet 模型使用事件处理方法来检测新的姿势。on(pose,callbackFxn)

要使用它们:

  1. 初始化预训练模型:
let posenet = ml5.nameOfMethod(nameOfPreTrainedModel,callbackFxn)
Enter fullscreen mode Exit fullscreen mode
  1. 定义回调函数:
function callbackFxn(){
console.log('model loaded successfully')
}
Enter fullscreen mode Exit fullscreen mode
  1. 使用#1中的变量引用的模型来做一些事情:
poseNet.on('pose', function(results){
//do something with the results
pose1 = results;

});
Enter fullscreen mode Exit fullscreen mode

回调函数被传递给方法,以便我们可以对收到的结果/数据做一些事情。

鏂囩珷鏉ユ簮锛�https://dev.to/kauresss/javascript-implementation-of-machine-learning-with-ml5-js-for-newbies-3kfp
PREV
在 express.js 中设置服务器
NEXT
关于更新的 React 文档你需要知道的一切