从零开始:使用 Brain.js 创建你的第一个神经网络(一) ...

农民  论坛元老 | 2025-1-21 08:30:19 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1018|帖子 1018|积分 3054

接待来到 brain.js 的学习之旅!

无论你是零基础的新手,照旧已经有一定编程经验的开发者,这个系列都将为你提供一个系统、全面的学习路径。我们将从最基础的概念开始,逐步深入到实际应用和高级技巧,最终让你可以或许自信地构建和练习自己的神经网络模型。
以下是我们的学习路线图:

这一系列文章从入门到进阶,涵盖了 brain.js 的焦点功能、技术细节以及实际应用场景。不仅得当初学者学习和实践,也为有一定基础的开发者提供了更多扩展和深入的思考方向。接下来,我们进入系列的第一部分:基础篇。

弁言

神经网络是机器学习中的紧张组成部分,而 brain.js 是一个易于使用的 JavaScript 库,可以帮助开发者快速搭建和练习神经网络模型。无论你是初学者照旧已有一定经验的开发者,在本篇文章中,我们将专注于快速搭建一个简单的二分类模型。通过实际代码示例,你将把握 brain.js 的基本用法并对神经网络的焦点概念有初步明白。
一、什么是 brain.js?

brain.js 是一个支持浏览器和 Node.js 环境的神经网络库,它的目标是简化神经网络的构建和练习过程。通过它,开发者无需深入明白复杂的数学公式和理论,只需编写少量代码即可完成神经网络的实现。
紧张特点

  • 简单易用:提供直观的 API,得当快速开发和学习。
  • 跨平台支持:可以在浏览器和 Node.js 环境下运行。
  • 支持多种使命:包括分类、回归、时间序列等多种使命类型。
  • GPU 加快:支持 GPU 计算,明显提升练习速率。
  • 扩展性强:可以与其他库或框架联合使用。
应用场景


  • 文本分类(如垃圾邮件检测)。
  • 时间序列猜测(如股票价格猜测)。
  • 图像处理(如手写数字辨认)。
  • 推荐系统(如电影推荐)。
二、Brain.js 的发展历史和由来

brain.js 最早由 Heather Arthur 开发,并作为一个轻量级的 JavaScript 神经网络库发布。其焦点目标是让开发者可以或许快速上手并体验神经网络的魅力,而无需深厚的数学基础或复杂的编程经验。
紧张发展节点


  • 初版发布:在 GitHub 上推出后,因其易用性迅速受到关注。
  • GPU 加快支持:引入 gpu.js,明显提升模型练习和推理速率。
  • 现代化迁徙:重构代码以支持 ES6+ 语法和模块化,顺应现代 JavaScript 生态。
设计理念
brain.js 的设计理念是让每个开发者都能轻松地探索神经网络的可能性。它通过直观的 API 和简单的实现方式,让初学者无需复杂的理论知识也能快速构建模型。
当前现状
如今,brain.js 已支持多种使命类型(如分类、回归和时间序列猜测),仍旧是学习和实行神经网络的优秀工具。
三、什么是二分类模型?

二分类问题是机器学习中最常见的使命之一,指的是将数据点分类为两种种别中的一种。例如:


  • 判断一封邮件是垃圾邮件照旧正常邮件。
  • 猜测一个患者是否有某种疾病。
为了更好地明白二分类问题,我们将以经典的 XOR 问题 为例:
对于输入 [0, 0]、[0, 1]、[1, 0] 和 [1, 1],输出的目标分别是 0、1、1 和 0。这是一个非线性分类问题,适互助为简单神经网络的入门案例。
四、项目初始化

在正式开始之前,我们必要创建并初始化一个 Node.js 项目。
4.1 创建项目目次
首先,创建一个新的项目目次并进入该目次:
  1. mkdir brainjs-study-demo
  2. cd brainjs-study-demo
复制代码
4.2 初始化项目
使用 npm 初始化项目,天生 package.json 文件:
  1. npm init -y
复制代码
  -y 参数会主动使用默认配置天生 package.json 文件。如果你想手动配置,可以去掉 -y 参数。
  此时,项目目次中会天生一个 package.json 文件,记载了项目的基本信息和依赖项。
五、安装 brain.js

brain.js 是我们构建神经网络的焦点库。
5.1 安装 brain.js
在项目目次中安装 brain.js:推荐 Node 版本为 v14.x
  1. npm install brain.js
复制代码
安装完成后, brain.js 会被添加到 package.json 的 dependencies 中。
5.2 安装 gpu.js(可选)
brain.js 依赖 gpu.js 来提升计算性能,但不会主动安装。如果你希望加快模型练习大概项目无法运行的环境,可以运行以下命令安装 gpu.js:
  1. npm install gpu.js
复制代码
如果安装 gpu.js 失败,可能是因为缺少系统依赖。请根据系统环境安装必要的构建工具。
Windows 平台

  • 安装 Python (建议使用 Python 3.x)。
  • 安装 Visual Studio Build Tools,确保选择以下工作负载:

    • Node.js 开发工作负载
    • C++ 构建工具工作负载(如果必要)

六、编写第一个神经网络

6.1 创建 JavaScript 文件
在项目目次中创建一个新的 JavaScript 文件,例如 index.js。
6.2 编写代码
打开 index.js 文件,添加以下代码:
  1. // 引入 brain.js
  2. const brain = require('brain.js');
  3. // 创建神经网络
  4. const net = new brain.NeuralNetwork();
  5. // 定义训练数据(XOR 问题)
  6. const trainingData = [
  7.   { input: [0, 0], output: [0] },
  8.   { input: [0, 1], output: [1] }
  9. ,
  10.   { input: [1, 0], output: [1] },
  11.   { input: [1, 1], output: [0] }
  12. ];
  13. // 训练神经网络
  14. net.train(trainingData);
  15. // 测试神经网络
  16. const output = net.run([1, 0]);  // 输入 [1, 0],期望输出接近 [1]
  17. console.log(output);  // 输出类似 [0.9339389204978943]
复制代码
6.3 参数解释
NeuralNetwork:brain.NeuralNetwork 是 brain.js 提供的焦点类,用于创建前馈神经网络。默认环境下,网络布局为单隐藏层,节点数根据输入主动调整。
练习数据:input 是输入特性,output 是期望结果。XOR 问题的输入和输出设计表现了二分类模型的目标。
七、练习数据的设计与优化

练习数据是神经网络学习的基础,其设计直接影响模型的表现。
7.1 数据格式
在 brain.js 中,练习数据由 input 和 output 组成:


  • input 是一个数组,表示输入特性。
  • output 是一个数组,表示期望输出。
例如:
  1. { input: [0, 1], output: [1] }
复制代码
表示当输入 [0, 1] 时,期望输出为 [1]。
7.2 数据归一化
为了提高练习效率,建议将输入数据归一化到 [0, 1] 范围。例如,若原始数据为 [0, 100],可以通过以下方式归一化:
  1. const normalize = (value, max) => value / max;
  2. const input = [normalize(50, 100), normalize(75, 100)];
复制代码
八、保存和加载模型

为了避免每次运行代码都重新练习,可以将练习好的模型保存为 JSON 文件。
8.1 保存模型
在练习完成后,使用以下代码保存模型:
  1. const fs = require('fs');
  2. // 将模型保存为 JSON 文件
  3. const model = net.toJSON();
  4. fs.writeFileSync('model.json', JSON.stringify(model));
复制代码
8.2 加载模型
  1. const modelData = JSON.parse(fs.readFileSync('model.json'));
  2. net.fromJSON(modelData);
复制代码
九、扩展与优化

9.1 增长练习数据
扩展练习数据可以提高模型的正确性。例如:
  1. const extendedTrainingData = [  { input: [0, 0], output: [0] },  { input: [0, 1], output: [1] }
  2. ,  { input: [1, 0], output: [1] },  { input: [1, 1], output: [0] },  { input: [0.5, 0.5], output: [0] }];net.train(extendedTrainingData);
复制代码
9.2 使用配置参数优化练习
brain.js 提供了多种练习参数:


  • iterations:神经网络练习的最大循环次数。
  • learningRate:控制参数更新的幅度,范围一般为 0.1-0.5。
  • errorThresh:答应的最大毛病,默认值是 0.005(即 0.5% 的毛病)。
例如:
  1. net.train(trainingData, {
  2.   iterations: 2000, // 训练迭代次数
  3.   learningRate: 0.5, // 学习率
  4.   errorThresh: 0.01 // 允许的最大误差
  5. });
复制代码
总结

通过本文,你学会了如何从零开始创建一个基于 brain.js 的神经网络,并相识了练习数据的设计与优化方法。这只是入门的第一步,未来的文章将深入探讨更多高级主题,例如 LSTM 网络、时间序列猜测、模型调优等。
如果你在学习过程中有疑问,大概有自己的想法和建议,接待在批评区留言。各人一起讨论和互换!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表