使用Brain.js的机器学习入门教程

1,878 阅读6分钟

使用Brain.js的机器学习入门

大家都知道,机器学习在数学上是很密集的。对于大多数初学者来说,试图进入机器学习是一个挑战。然而,Brain.js让这项任务变得更加简单,因为它完全隐藏了理解神经网络的数学逻辑和复杂性。因此,对于初学者来说,很容易就能开始学习机器学习。

了解神经网络

你可以把神经网络想象成人类的大脑,有几个相互连接的节点被分成几层。这些层被划分为输入层、隐藏层和输出层。神经网络中的数据以单一方向从输入端向输出端移动。

这个概念允许我们将大量的标记数据输入到神经网络中,并利用它来训练网络,使其在给定一些输入的情况下给我们一个理想的输出。鉴于神经网络的处理时间和准确性,它们远比人脑好得多。

前提条件

该教程对初学者友好,所以如果你用Python或其他语言做过机器学习,这将是小菜一碟。这篇文章除了要求你有学习新概念的意愿外,还需要你具备以下条件。

  • 对[JavaScript]
  • 在你的电脑上安装有[Node.js]。
  • 一个代码编辑器。我更喜欢使用[VS Code]。

了解Brainjs

Brain.js是以一种有趣的方式来构建神经网络。它很容易学习输入和输出之间的模式和关系,并在处理相关问题时利用这些信息进行智能猜测。

Brain.js是一个很酷的概念,因为在互联网上发现的大部分文档都是基于Python的。因此,对于有网络开发背景的开发者来说,学习的阶梯变得难以攀登。

从他们的官方文档来看,Brain.js是一个用JavaScript构建的GPU加速神经网络库,用于浏览器和Node.js应用程序。Brain.js易于理解,使用简单,特别是对于初学者来说。

项目目标

本文的主要目标是为初学者,特别是那些来自网络开发背景的人,提供一条进入机器学习的路径。在这个过程中,我们将建立一个神经网络,给它一组数据进行训练,然后确保我们的模型能够根据提供的学习数据集进行预测。

项目设置

运行npm init -y ,创建一个空的package.json 文件。接下来,在终端执行命令npm install brain.js ,安装Brain.js包。

在应用程序的根文件夹中,我们将有index.js 文件,其中包含应用程序的驱动代码。还将有一个文件,包含我们的神经网络的训练数据。训练数据将是JSON的形式,所以我们将创建一个data.json 文件。

最终的项目结构应该是这样的。

brainjs
    ┣ node_modules
    ┣ data.json
    ┣ index.js
    ┣ package-lock.json
    ┗ package.json

训练概述

我们的训练数据将是一个对象数组,每个对象都有一个text 和一个category 。根据文本中的单词,一个给定的短语可以被归类为基于back-end 或基于front-end 。我们将把这些数据提供给神经网络进行训练。

之后,我们将给它一个短语,让它确定该短语是属于front-end 还是back-end 。在data.js 文件中,添加下面的片段。

[
    {
      "text": "the user interface component is fixed",
      "category": "frontend"
    },
    {
      "text": "the css file look inituitive",
      "category": "frontend"
    },
    {
      "text": "i need a few ui designs",
      "category": "frontend"
    },
    {
      "text": "the database has issues",
      "category": "backend"
    },
    {
      "text": "the button is centered",
      "category": "frontend"
    },
    {
      "text": "make it clickable",
      "category": "frontend"
    },
    {
      "text": "i did the api integration",
      "category": "backend"
    },
    {
      "text": "a driver code should have less memory usgae",
      "category": "backend"
    },
    {
      "text": "it needs more memory",
      "category": "backend"
    },
    {
      "text": "code with responsive design in users interface",
      "category": "frontend"
    },
    {
      "text": "navigate the website easily",
      "category": "frontend"
    },
    {
      "text": "user login and authentication",
      "category": "backend"
    },
    {
      "text": "forms and dropdowns lists",
      "category": "frontend"
    },
    {
      "text": "username password email are stored",
      "category": "backend"
    },
    {
      "text": "programming loading animation",
      "category": "frontend"
    },
    {
      "text": "mysql, mongo, firebase databases",
      "category": "backend"
    },
    {
      "text": "restful api is useful with backend",
      "category": "backend"
    },
    {
        "text": "data access layer is not presentation layer",
        "category": "backend"
    },
    {
        "text": "the web browser loads dynamic webpages slowly",
        "category": "frontend"
    }
  ]

创建神经网络

在构建神经网络时,我们首先需要将Brain.js 库导入项目中。导入库后,我们需要有我们的数据文件,我们将从那里获取数据来训练模型。

下面的代码片断显示了我们如何导入库和数据文件。

/**
 * bring in the brain.js dependency
 */
const brain = require('brain.js')
/**
 * Import the data file
 */
const data = require('./data.json')

长短期记忆

如果你以前接触过机器学习,你可能对长短时记忆(LSTM)这个词很熟悉。LSTM是一种先进的循环神经网络(RNN),它允许信息在丢失之前停留很长时间。

RNN是一种用于持久性记忆的神经网络。比方说,你在课堂上讨论,你记住了老师在课堂上讲的一个概念,你在讨论组中使用同样的概念来解决一个问题。RNN的工作方式与此相同,它记住了以前的信息,并使用这些信息来处理当前给定的输入。

RNN的问题是,由于梯度消失,它们不能记住长期信息,由于这个原因,LSTM被设计为避免长期依赖问题。我们将在我们的例子中使用内置的LSTM来创建我们的网络,如下所示。

/**
 * Create the  neural network
 */
const network = new brain.recurrent.LSTM();

训练模型

为了训练模型,我们将从我们的数据文件中获取数据,将其转换为具有输入和输出对的数值数组。我们将通过在数据对中运行几个相互作用来训练我们的模型。

这个过程需要时间,取决于你对数据集进行的迭代次数。

下面的代码片段选择了我们要训练模型的方式。

/**
 * Training the model and setting the number 
 * of iteration to make during the training
 */
network.train(trainingData, {
    iterations: 2000
})

测试模型

在项目的最后阶段,我们将测试训练好的模型的准确性,给它一个句子,让它决定这个句子是前端还是后端行话。

下面的片段将帮助我们测试该模型。

第一个测试

/**
 * Supply the input to classify
 */
const output = network.run('navigate the website easily')

/**
 * Printing the output on the console
 */
console.log(`Category: ${output}`)

输出。

Category: frontend

第二次测试

/**
 * Supply the input to classify
 */
const output = network.run('the api did not work maybe the authentication integration is not well done')

/**
 * Printing the output on the console
 */
console.log(`Category: ${output}`)

输出。

Category: backend

结论

在本教程中,我们从初学者的角度对Brain.js机器库进行了介绍。当我们建立了一个机器学习模型,使用真实的训练数据进行预测时,这个项目让我很兴奋。

测试这个模型,看到它能准确地预测一个给定的短语是后端还是前端程序员的行话,这就是所有乐趣的开始。我正在对这一主题进行更多的研究,我希望能就同一概念做更多的项目。