带你在前端上玩转机器学习,从零去构建,训练一个模型!!

前言

随着前端技术的发展,机器学习已经不再局限于后端或专用的深度学习框架。Brain.js 是一个非常优秀的 JavaScript 库 ,它使得在前端 构建和训练神经网络 变得简单易行。本文将带你从零开始,使用 Brain.js 构建和训练一个*简单的神经网络模型,并将其应用于实际场景中。

其实也有其他的前端库(如TensorFlow.js)也可以实现简单的机器学习模型。但是他们都不如 Brain.js 容易上手,Brain.js 提供的API都简单易懂,使得我们初学者也可以一起上手体验!! 还有就是 它也配备了完善的说明文档供大家阅读理解!BrainJS/brain.js说明文档,是不是非常nice!

明白其妙处现在邀请大家和我一起去体验它!

如何引入Brain.js

可以通过CDN引入

xml 复制代码
<script src="https://cdn.jsdelivr.net/npm/brain.js"></script>

也可以使用npm安装

复制代码
npm install brain.js

上面两种方法都可以食用!,我的github开源仓库 中也提供了brain.js文件,大家也可以通过直接在根目录下引入这个文件,去进行使用.wqlblue/lesson_hm: AI全栈学习

怎么去玩Brain.js

首先我们介绍一下什么是神经网络模型,因为我们将要利用Brain.js去搭建一个小的神经网络模型

神经网络模型是什么

它是一种模仿人脑神经元工作方式,由许多相互连接的神经元组成,通过对大量数据进行学习训练,从而能够对输入信息进行处理、分类或预测的计算模型。简而言之 ,他就是很多小神经元连接起来的模拟大脑,它通过大量数据的训练 后,就能像人一样处理区分或者猜测输入的信息。

理解了之后咱们来开始使用它去搭建一下!

因为咱们已经引入了这个库,所以我们可以直接利用它去创建初始化一个神经网络!

ini 复制代码
   const network = new brain.recurrent.LSTM();

分析训练Data

是不是很简单,但是光初始化了还不够,他还没有被训练过,所以我们还无法去利用它分析东西,所以哦我们这里还需引入一堆数据,我这里引入的是

ini 复制代码
 const data = [
            { "input": "implementing a caching mechanism improves performance", "output": "backend" },
            { "input": "hover effects on buttons", "output": "frontend" },
            { "input": "optimizing SQL queries", "output": "backend" },
            { "input": "using flexbox for layout", "output": "frontend" },
            { "input": "setting up a CI/CD pipeline", "output": "backend" },
            { "input": "SVG animations for interactive graphics", "output": "frontend" },
            { "input": "authentication using OAuth", "output": "backend" },
            { "input": "responsive images for different screen sizes", "output": "frontend" },
            { "input": "creating REST API endpoints", "output": "backend" },
            { "input": "CSS grid for complex layouts", "output": "frontend" },
            { "input": "database normalization for efficiency", "output": "backend" },
            { "input": "custom form validation", "output": "frontend" },
            { "input": "implementing web sockets for real-time communication", "output": "backend" },
            { "input": "parallax scrolling effect", "output": "frontend" },
            { "input": "securely storing user passwords", "output": "backend" },
            { "input": "creating a theme switcher (dark/light mode)", "output": "frontend" },
            { "input": "load balancing for high traffic", "output": "backend" },
            { "input": "accessibility features for disabled users", "output": "frontend" },
            { "input": "scalable architecture for growing user base", "output": "backend" }
        ];

大家知道我引入的数据是什么数据结构吗?没错他是一个JSON数组 ,为什么是一个JSON数组呢?这是因为,Brain.js 库期望训练数据以特定 的格式提供,即每个数据点是一个对象 ,包含 input 和 output字段。使用 JSON 数组刚好可以满足这一要求。明白了为何使用这个数据结构类型之后,我们来分析一下我给出的数据是在训练什么?

数据分析

在这段数据中,每个对象都包含一个 input 字段和一个 output 字段。input 字段是一个字符串,描述了一个具体的任务或功能;output 字段也是一个字符串,表示该任务属于前端还是后端。我们利用这些数据去训练初始化的模型network,然后他就可以实现,通过我们输入的 input 字段 去判断他是属于前端还是后端

训练我们的模型

直接调用 networktrain() 函数就可以去训练它了,是不是很容易理解

yaml 复制代码
        network.train(data, {
            iterations: 2000,
            log: true,
            logPeriod: 100 
        })

这里的 iterations 属性 是训练迭代次数,我们这里是2000次, log属性 是你是否想要打印日志,logPeriod属性是打印日志的频率,即每一百次打印一次训练日志。在我们运行开始训练的时候,在浏览器的控制台便可以看到他的训练日志啦!

测试一下我们新鲜出炉的模型

直接利用 networkrun()函数既可 ,他里面的参数就是input的数据

ini 复制代码
        const output = network.run("data access layer is not presentation layer"
        );
        console.log(output); 

可以看到上图我们打印了训练日志 ,最后输出了我们创建的模型它的判断, 他是一个前端类型的操作!! 是不是感觉自己瞬间就行了!!原来这就是机器学习。知其然知其所以然,我们来介绍一下我们的模型是如何消化这些数据的

模型的训练过程

它的训练过程分为四步!

  1. 前向传播

    • 模型接收输入数据(input),通过一系列计算(称为前向传播)生成预测输出。
    • 例如,输入 "implementing a caching mechanism improves performance",模型会生成一个预测值,比如 [0.9],表示后端的概率为 0.9。
  2. 计算损失

    • 模型将预测输出与实际输出(output)进行比较,计算损失。
    • 如果实际输出是 [1](表示后端),而模型预测输出是 [0.9],那么损失会很小,因为预测值接近实际值。
  3. 反向传播

    • 模型根据损失值,从输出层向输入层反向传播误差,调整每一层的权重。
    • 通过调整权重,模型可以减少未来的预测误差。

    比如说它觉得自己在某个环节 太看重某个因素 了,下次就得把这个因素的重要性降低点儿,就好像咱们发现做错题是因为太关注某个知识点了,下次就得适当改变一下对这个知识点的重视程度一样呢。

  4. 权重更新

    • 模型使用梯度下降算法来更新权重,使损失函数逐渐减小。
    • 通过多次迭代,模型逐渐学习到输入数据和输出标签之间的关系。

    就好比你每次考试完发现错题,总结经验调整自己学习重点,争取下次考得更好一样呀。

总之呢,整个训练过程就是这个 "小助手" 不断发现自己错误、总结改进,最后变得越来越厉害的一个过程哦。

END

上文中,我们一起我们从零开始使用 Brain.js 构建和训练了一个简单的神经网络模型,并将其应用于实际场景中。是不是很有趣,如果你对机器学习感兴趣,不妨动手试试 Brain.js,相信你会在实践中发现更多有趣的应用和可能性。希望你在前端机器学习的道路上越走越远,创造出更多令人惊叹的作品!

相关推荐
阿珊和她的猫1 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
GetcharZp5 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
加班是不可能的,除非双倍日工资5 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip6 小时前
vite和webpack打包结构控制
前端·javascript
excel7 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼7 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy7 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT7 小时前
promise & async await总结
前端