前言
随着前端技术的发展,机器学习已经不再局限于后端或专用的深度学习框架。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
字段 去判断他是属于前端还是后端!
训练我们的模型
直接调用 network
的 train()
函数就可以去训练它了,是不是很容易理解
yaml
network.train(data, {
iterations: 2000,
log: true,
logPeriod: 100
})
这里的 iterations 属性 是训练迭代次数,我们这里是2000次, log属性 是你是否想要打印日志,logPeriod属性是打印日志的频率,即每一百次打印一次训练日志。在我们运行开始训练的时候,在浏览器的控制台便可以看到他的训练日志啦!
测试一下我们新鲜出炉的模型
直接利用 network
的 run()
函数既可 ,他里面的参数就是input
的数据
ini
const output = network.run("data access layer is not presentation layer"
);
console.log(output);
可以看到上图我们打印了训练日志 ,最后输出了我们创建的模型它的判断, 他是一个前端类型的操作!! 是不是感觉自己瞬间就行了!!原来这就是机器学习。知其然知其所以然,我们来介绍一下我们的模型是如何消化这些数据的
模型的训练过程
它的训练过程分为四步!
-
前向传播:
- 模型接收输入数据(
input
),通过一系列计算(称为前向传播)生成预测输出。 - 例如,输入 "implementing a caching mechanism improves performance",模型会生成一个预测值,比如
[0.9]
,表示后端的概率为 0.9。
- 模型接收输入数据(
-
计算损失:
- 模型将预测输出与实际输出(
output
)进行比较,计算损失。 - 如果实际输出是
[1]
(表示后端),而模型预测输出是[0.9]
,那么损失会很小,因为预测值接近实际值。
- 模型将预测输出与实际输出(
-
反向传播:
- 模型根据损失值,从输出层向输入层反向传播误差,调整每一层的权重。
- 通过调整权重,模型可以减少未来的预测误差。
比如说它觉得自己在某个环节 太看重某个因素 了,下次就得把这个因素的重要性降低点儿,就好像咱们发现做错题是因为太关注某个知识点了,下次就得适当改变一下对这个知识点的重视程度一样呢。
-
权重更新:
- 模型使用梯度下降算法来更新权重,使损失函数逐渐减小。
- 通过多次迭代,模型逐渐学习到输入数据和输出标签之间的关系。
就好比你每次考试完发现错题,总结经验 后调整自己学习重点,争取下次考得更好一样呀。
总之呢,整个训练过程就是这个 "小助手" 不断发现自己错误、总结改进,最后变得越来越厉害的一个过程哦。
END
上文中,我们一起我们从零开始使用 Brain.js 构建和训练了一个简单的神经网络模型,并将其应用于实际场景中。是不是很有趣,如果你对机器学习感兴趣,不妨动手试试 Brain.js,相信你会在实践中发现更多有趣的应用和可能性。希望你在前端机器学习的道路上越走越远,创造出更多令人惊叹的作品!