npm包Multilayer Perceptron使用教程

阅读时长 10 分钟读完

介绍

Multilayer Perceptron,简称 MLP,是一种常用的人工神经网络模型,广泛应用于图像识别、语音识别、自然语言处理等领域。multilayer-perceptron 是一款基于 Node.js 的开源工具包,用于实现 MLP 的算法和应用。

在本篇文章中,我们将介绍如何使用 multilayer-perceptron 这个 npm 包来实现一个简单的图像分类任务,并解释 MLP 的工作原理。

安装

安装 multilayer-perceptron 可以使用 npm 命令:

使用

数据准备

在开始使用 MLP 进行图像分类之前,我们需要准备一些数据。我们采用 MNIST 数据集来训练我们的 MLP 模型。MNIST 数据集包含了将近 7 万张 28x28 像素的手写数字图片,每张图片都对应一个标签,代表该图片所显示的数字为几。你可以从 官网 下载数据集,或者使用以下代码进行下载和解压:

-- -------------------- ---- -------
--- -- - --------------
--- ---- - ------------------------------

-------- ------------- ----- --- -
  --- ---- - ---------------------------
  --- ------- - ---------- - - ----
    -------
    -----------
    ------------- ---------- -
      ---------------
    ---
-

-------- -------------- ----- --- -
  --- ---- - ---------- --- - - --------
  --- ---- - -------------------------- ------- -------
  ---------------------- ----- --------
  --------------- -------------- -
    -- ----- --- -- -
      -----------
      -----
    -
  ---
-

-----------------------------------------------------------------------
         ------------------------------- ---------- -
  --------------------------------------
         ---------------------------- ---------- -

    -----------------------------------------------------------------------
             ------------------------------- ---------- -
      --------------------------------------
             ---------------------------- ---------- -

        ----------------------------------------------------------------------
                 ------------------------------ ---------- -
          -------------------------------------
                 --------------------------- ---------- -

            ----------------------------------------------------------------------
                     ------------------------------ ---------- -
              -------------------------------------
                     --------------------------- ---------- -

                ------------------ ------- ---------- --- -------------
              ---
            ---
          ---
        ---
      ---
    ---
  ---
---

执行完以上代码后,在当前目录下将会生成四个文件:

  • train-images-idx3-ubyte: 训练数据图片
  • train-labels-idx1-ubyte: 训练数据标签
  • t10k-images-idx3-ubyte: 测试数据图片
  • t10k-labels-idx1-ubyte: 测试数据标签

数据加载

我们使用 mnist-reader 包来加载 MNIST 数据集。在该包中,我们可以使用 MNISTReader 类来读取数据:

-- -------------------- ---- -------
--- ----------- - ------------------------

--- ------------ - --- ----------------------------------------
                                   -----------------------------
--- ----------- - --- ---------------------------------------
                                  ----------------------------

--- ---------- - --------------------
--- --------- - -------------------

在以上代码中,我们首先使用 MNISTReader 构造函数,传入训练数据和测试数据的文件路径。然后,我们使用 reader_train.read()reader_test.read() 方法来读取数据集。

train_datatest_data 变量将会被存储为包含两个 key 的对象:

  • images: 图像数据,类型为 Uint8Array,长度为 N x 28 x 28,其中 N 表示图像数量。
  • labels: 标签数据,类型为 Uint8Array,长度为 N

数据处理

在使用 MLP 进行训练之前,我们需要对数据进行处理。首先,我们将把像素值压缩到 [0, 1] 范围内,并把标签转化为 one-hot 编码:

-- -------------------- ---- -------
-------- ----------------- -
  --- - - ------------- - ----
  --- ---- - - -- - - -- ---- -
    --- ---- - - -- - - ---- ---- -
      -------- - --- - -- - -------- - --- - -- - ----
    -
  -
-

-------- -------------- ------------ -
  --- - - --------------
  --- --- - --- -------------- - -------------
  --- ---- - - -- - - -- ---- -
    ----- - ----------- - ---------- - --
  -
  ------ ----
-

-----------------------------
----------------------------

--- ------------ - ------------------------- ----
--- ----------- - ------------------------ ----

normalize()onehot() 函数中,我们分别处理了图像和标签数据。在 normalize() 中,我们简单地把像素值压缩到 [0, 1] 范围内,这是一种常用的数据预处理方式。在 onehot() 中,我们采用了 one-hot 编码来表示标签,这是一种常用的分类任务预处理方式。

构建 MLP 模型

我们使用 multilayer-perceptron 包来构建 MLP 模型:

-- -------------------- ---- -------
--- --- - ---------------------------------

--- --- - --- -----
  ------ ----            -- ------
  ------- ----- ----     -- ------
  ------- ---            -- ------
  ------------- -----    -- ---
  --------- ---          -- --
---

在以上代码中,我们使用 MLP 构造函数来创建 MLP 模型。MLP 构造函数接受一个对象,包括以下参数:

  • input: 输入层节点数。
  • hidden: 隐藏层节点数,可以是一个数组,每个元素表示一个隐藏层的节点数。
  • output: 输出层节点数。
  • learningRate: 学习率,用于调整权重的更新速度。
  • momentum: 冲量,用于加速梯度下降过程。

在我们的 MLP 模型中,我们设定了一个 784-100-50-10 的神经网络结构,包含了两个隐藏层和一个输出层。其中,输入层节点数为 784,对应一个 28x28 像素的图像。输出层节点数为 10,对应 0 到 9 十个数字的分类问题。

训练 MLP 模型

在构建 MLP 模型之后,我们使用 net.train() 方法来训练模型:

在以上代码中,我们使用 train() 方法来训练模型。train() 方法接受三个参数:

  • input: 输入数据,类型为 Float32Array,长度为 N x 784,其中 N 表示数据数量。
  • output: 输出数据,类型为 Float32Array,长度为 N x 10,其中 N 表示数据数量。
  • options: 一个对象,包括以下参数:
    • errorThresh: 误差阈值,训练过程中每一轮迭代的误差达到该值即可停止训练。
    • iterations: 迭代次数,训练过程中最多迭代该次数即可停止训练。
    • log: 是否输出日志。
    • logPeriod: 日志输出周期,每迭代 logPeriod 轮输出一次日志。

测试 MLP 模型

在训练 MLP 模型之后,我们使用 net.test() 方法来测试模型的精度:

在以上代码中,我们使用 test() 方法来测试模型的精度。test() 方法接受两个参数:

  • input: 输入数据,类型为 Float32Array,长度为 N x 784,其中 N 表示数据数量。
  • output: 输出数据,类型为 Float32Array,长度为 N x 10,其中 N 表示数据数量。

test() 方法返回模型在测试数据上的精度,即正确分类的样本比例。执行以上代码,我们可以看到 MLP 模型在 MNIST 数据集上的精度,通常可以达到 95% 以上。

结论

在本篇文章中,我们介绍了如何使用 multilayer-perceptron 这个 npm 包来实现一个简单的图像分类任务,并解释了 MLP 的工作原理。MLP 是一种常用的人工神经网络模型,广泛应用于图像识别、语音识别、自然语言处理等领域,它的工作原理是通过一系列的神经元来模拟一个函数的映射过程。在实际应用中,我们需要使用一系列的数据处理、模型构建和模型训练技术来构建一个稳定而有效的 MLP 模型,如本篇文章中所示。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055e9b81e8991b448dbf0e

纠错
反馈