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

前言

随着前端技术的发展,机器学习已经不再局限于后端或专用的深度学习框架。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,相信你会在实践中发现更多有趣的应用和可能性。希望你在前端机器学习的道路上越走越远,创造出更多令人惊叹的作品!

相关推荐
代码老祖42 分钟前
vue2 + iview(view-design) 中封装使用 vxe-table 处理表格渲染大量数据卡顿现象
前端·vue.js·view design·vxe-table
咔咔库奇1 小时前
CSS基础知识01
前端·css
黑心萝卜三条杠1 小时前
PyTorch 介绍与实战:从数据加载到模型训练与测试
python·深度学习·机器学习
missingzlp1 小时前
HTML and CSS Support HTML 和 CSS 支持
前端·css·html
Sword991 小时前
LangChain 实战08 - OutputParser
前端·人工智能·豆包marscode
乐多_L1 小时前
axios的post请求,数据为什么要用qs处理?什么时候不用?
前端·javascript·vue.js
Stanford_11061 小时前
C++入门基础知识150—【关于C++ 输入/输出运算符重载】
前端·javascript·c++·微信小程序·微信公众平台·twitter·微信开放平台
玩AI的小胡子1 小时前
目前主流AI机器学习的实战入门案例
深度学习·机器学习·aigc
龙的爹23331 小时前
论文 | Learning to Transfer Prompts for Text Generation
人工智能·深度学习·机器学习·语言模型·自然语言处理·prompt
Domain-zhuo2 小时前
css3的新特性有哪些?
前端·css·css3