zoukankan      html  css  js  c++  java
  • BP神经网络—java实现(转载)

    神经网络的结构

    神经网络的网络结构由输入层,隐含层,输出层组成。隐含层的个数+输出层的个数=神经网络的层数,也就是说神经网络的层数不包括输入层。下面是一个三层的神经网络,包含了两层隐含层,一个输出层。其中第一层隐含层的节点数为3,第二层的节点数为2,输出层的节点数为1;输入层为样本的两个特征X1,X2.

    图1 三层神经网络

    在神经网络中每一个节点的都与上一层的所有节点相连,称为全连接。神经网络的上一层输出的数据是下一层的输入数据。在图中的神经网络中,原始的输入数据,通过第一层隐含层的计算得出的输出数据,会传到第二层隐含层。而第二层的输出,又会作为输出层的输入数据。

    神经网络中的每一层(除了输入层)都是由神经元组成,也称为节点。每一个神经元都相当于一个感知器。如下图:

    图2 单个神经元

     在神经网络中,每个节点都将计算出特征矩阵X与权值矩阵的加权和,得到净输入e,然后通过激励函数f(e)得到该节点的输出y。在图1中,每条连线都可以看做是一个权值。

    在神经网络中,可以添加输出层节点的个数来解决多分类问题。有四个类别需要分类则,则输出层的节点个数可以设为4个节点,每一个节点代表一个类别。

    BP神经网络的训练过程

    神经网络的训练过程分为两个过程:1、向前传播得到预测数据;2、反向传播更新权重。如下图所示:

    图3 神经网络的训练过程

    第一步、向前传播得到预测数据:向前传播的过程,即数据从输入层输入,经过隐含层,输出层的计算得到预测值,预测值为输出层的输出结果。网络层的输出即,该层中所有节点(神经元)的输出值的集合。我们以图一的神经网络结构为例,分析向前传播过程。

    1.得到隐含层的输出y1,y2,y3

    2.获取到第二层的隐含层输出y4,y5,输入的数据也就是第一层隐含层的输出数据y1,y2,y3

     

    3、通过输出层,得到最后的预测值y。

    第二步、反向传播更新权重:根据样本的真实类标,计算模型预测的结果与真实类标的误差。然后将该误差反向传播到各个隐含层。计算出各层的误差,再根据各层的误差,更新权重。

    1.计算输出层的误差:其中z为该样本的类标

    2计算第二层隐含层的误差

    3.计算第一次隐含层的误差:

    4、更新权重:新的权值=原权值+学习速率×该节点的误差×激励函数的导函数的值(f(e)的倒数)×与该节点相连的输入值

     4.1更新输入层与第一层隐含层之间的权值:

     

    4.2更新第一层隐含层与第二层隐含层之间的权值

    4.3更新第二层隐含层与输出层之间的权值

    以上就是反向传播的过程。误差从输出层反向的传到输入层,然后再从输入层向前更新权值。

    BP神经网络的设计与实现

      (一) BP神经网络的设计

    1.设计网络的结构:

    本次实验采用java语言实现。设计了包含一个隐含层的神经网络,即一个2层的神经网络。

    每层都含有一个一维X特征矩阵即为输入数据,一个二维W权值矩阵,一个一维的误差矩阵error,同时该神经网络中还包含了一个一维的目标矩阵target,记录样本的真实类标。

    X特征矩阵:第一层隐含层的X矩阵的长度为输入层输入数据的特征个数+1,隐含层的X矩阵的长度则是上一层的节点的个数+1,X[0]=1。

    W权值矩阵:第一维的长度设计为节点(即神经元)的个数,第二维的长度设计为上一层节点的个数+1;W[0][0]为该节点的偏置量

    error误差矩阵:数组长度设计为该层的节点个数。 

    目标矩阵target:输出层的节点个数与其一致。

    激活函数:采用sigmoid函数:1/1+e-x

    2.神经网络的计算过程

    按照以上的设计,向前传播得到下一层的输出结果,如图所示: 

    求误差过程,如图所示:

    反向传播过程,调整权值,如图所示:

    (二) BP神经网络的实现

    一、向前传播得到预测数据:

    1.初始化权值
    2.训练数据集:
      2.1、导入训练数据集和目标值;
      2.2、向前传播得到输出值;
        2.2.1、获取隐含层的输出
        2.2.2、获取输出层的输出
    二、反向传播更新权重
     1、获取输出层的误差;
     2、获取隐含层的误差;
     3、更新隐含层的权值;
     4、更新输出层的权值;
    三.测试神经网络
      3.3 向前传播得到预测值;

    代码如下:

    View Code

    (二) BP神经网络的测试

    用上面实现的BP神经网络来训练模型,自动判断它是正数还是复数,奇数还是偶数.

    View Code

    在BP神经网络中, 学习速率,训练集,以及训练次数,都会影响到最终模型的泛化能力。因此,在设计模型时,节点的个数,学习速率的大小,以及训练次数都是需要考虑的。

  • 相关阅读:
    [MacOS]Sublime text3 安装(一)
    [RHEL8]开启BBR
    PAT Advanced 1136 A Delayed Palindrome (20分)
    PAT Advanced 1144 The Missing Number (20分)
    PAT Advanced 1041 Be Unique (20分)
    PAT Advanced 1025 PAT Ranking (25分)
    PAT Advanced 1022 Digital Library (30分)
    PAT Advanced 1019 General Palindromic Number (20分)
    PAT Advanced 1011 World Cup Betting (20分)
    PAT Advanced 1102 Invert a Binary Tree (25分)
  • 原文地址:https://www.cnblogs.com/xiongchang95/p/8527278.html
Copyright © 2011-2022 走看看