精华内容
下载资源
问答
  • 我的毕设做的是基于opencv和卷积神经网络的人脸识别项目。在做完这个项目之后,我一直想好好总结一下所学到的关于卷积神经网络的知识。现在趁着有点空闲,随手记录一点以前学过的,或者正在学习的知识点,相当于一个...

    1.前言

    我的毕设做的是基于opencv和卷积神经网络的人脸识别项目。在做完这个项目之后,我一直想好好总结一下所学到的关于卷积神经网络的知识。现在趁着有点空闲,随手记录一点以前学过的,或者正在学习的知识点,相当于一个备忘录。

    **

    2.卷积神经网络模型概览

    **
    常见的卷积神经网络结构
    从一开始的LeNet到后来的VGGNet,再到google的Inception系列,再到ResNet系列,每一种神经网络模型都有其创新的点,下面我们就来按照历史脉络好好讲解一下各种模型的特点。(里面涉及到的各种卷积神经网络的基础知识要点可以参见我的另一篇基础博客)

    2.1LeNet模型结构

    LeNet网络结构是再1998年由lecun提出的。它被创造出来的目的是解决手写数字识别的问题。即它是一个10分类任务的解决办法。下图是它的一个基本的网络结构。
    LeNet网络结构
    网络结构图中显示的很清楚。它包括了两个卷积层,两个下采样层,两个全连接层和一个激活层,最后有一个sotfmax分类层。可以说,LeNet麻雀虽小,五脏俱全。包括了基本的卷积神经网络的所有单元。

    2.2 AlexNet

    话不多说,我们直接上来看AlexNet的网络结构:
    在这里插入图片描述
    我们可以看到,它的网络结构被分成了两支,这是因为当时的GPU计算能力不够,显存容量不够大。为了完成模型的训练,作者使用了两块显卡来进行分布式的训练。我们现在想要训练这样一个模型,只需要实现其中一条就好了。
    emmmm我其实个人是想知道怎么进行分布式训练的,但是我没有两块显卡(贫穷限制了我的发展) 找不到相关技术资料,这里就不赘述了。
    对比刚刚的LeNet,我们可以发现从结构上来看,它并没有很大的改变。我们看它的网络结构:输入层是224* 224的数据,然后进行了多轮卷积(提取特征),其中包括11* 11的卷积核,5* 5的卷积核,3* 3的卷积核。虽然在图片上我们只画了卷积层,但我们应该知道,每一个卷积层之后都会跟上一个激活层(用来增加模型的非线性表达能力),一个降采样pooling层(减小数据量,提取主要特征),以及一个局部归一化处理(对数据进行一定的约束,使我们的数据约束在一定的范围内,使网络更好的收敛)。经过多个卷积层之后,就会有三个fc层(全连接层)。同样的,在每一个fc层之后,也会有有一个relu激活层,以及一个dropout层(减小参数量,防止过拟合,增加i网络结构变化)。最后呢,通过一个fc层+softmax层来将我们的数据映射到一个一千维的向量上去(因为实现的是一千种物品的分类网络),这个向量就是我们输入的图像在这一千个类别上的概率分布。其中概率值最高的那个类别就是网络判断出来图像所属的类别。相较与LeNet网络,它的网络深度更深,并且成功运用了gpu进行运算,为后面的人们打开了新世界大门。整个网络的参数量在60兆以上,最中训练出来的模型文件在200兆以上。它最大的意义在于,通过这次实验,证明了更深层次的卷积神经网络,可以提取出更加鲁棒的特征信息,并且这些特征信息能更好的区分物品类别。

    我个人的意见是,这个更深层网络提取更高维度的特征,它是这么个意思:前面的卷积层提取一些浅层的特征,比如纹理,形状(我们输入的是颜色特征),然后中间的卷积层呢,提取的是一些更复杂的特征,这些特征难以描述,就类似于我们中国说看山不是山,看水不是水的境界,只可意会,不可言传。而最后的分类信息,就是最后的看山还是山,看水还是水的境界。

    在AlexNet网络中,有以下特点:

    • 增加了relu非线性激活函数,增强了模型的非线性表达能力。成为以后卷积层的标配。
    • dropout层防止过拟合。成为以后fc层的标配。
    • 通过数据增强,来减少过拟合。
    • 引入标准化层(Local Response Normalization):通过放大那些对分类贡献较大的神经元,抑制那些对分类贡献较小的神经元,通过局部归一的手段,来达到作用。

    当然后来人们通过研究发现,这个LRN层并没有啥太好的作用,所以在后来的网络结构中,它被BN层(批归一化层)取代了。

    2.3 ZFNet

    在这里插入图片描述
    ZFNet在AlexNet的基础上做了小小的改进:

    • 调整第一层卷积核大小为7*7
    • 设置卷积参数stride=2

    通过更小的卷积核和更小的步长,来提取更多的信息,确保网络提取出来的信息更加有效。其次,它增加了卷积核数量,导致网络更加庞大。
    最重要的是:它从可视化的角度出发,解释了CNN有非常好的性能的原因。
    在这里插入图片描述

    如图所示,右半边是我们一个正常的神经网络的数据流向:对于一副输入图像,我们通过pooling层来进行下采样,再通过卷积层进行特征提取,通过relu层来提升非线性表达能力。对于最后的输出结果,我们怎么把它还原成原始的图片呢?
    实际上,如果我们想进行100%的还原是不可能的,因为每一次的pooling层都会丢失一些信息。因此我们在可视化的时候,更主要的是对它的特征的语义进行更高层次的分析。通过对输出层进行上采样,可以得到与我们原始图像大小一致的特征图。通过观察这些特征图,作者得出了这样的一些结论:

    • 特征分层次体系结构(就是我前面说的三层)
    • 深层特征更鲁棒(区分度高,不受图片微小的影响)
    • 深层特征收敛更慢

    2.4 VGGNet

    它由牛津大学计算机视觉组和Google Deepmind共同设计。主要是为了研究网络深度对模型准确度的影响,并采用小卷积堆叠的方式,来搭建整个网络。它的参数量达到了138M,整个模型的大小>500M.网络结构如下:
    在这里插入图片描述
    从上面的结构中我们可以看到,VGGNet的网络结构被分为11,13,16,19层。每层都包含了不同数量的卷积层(需要注意的是,每层卷积层之后都有激活层和池化层,只是由于长度限制没有在表中列出来),最后通过三个fc层来将我们的特征进行最后的向量化,最终得到一个1000维的向量,这个向量经过softmax之后,就会得到最终我们类别上的概率分布。而概率值最高的那个,就是我们所要分类的那个类别。
    VGGNet的特点:

    • 网络深,卷积层多。结构哦更加规整,简单。
    • 卷积核都是3* 3的或者1* 1的,且同一层中channel的数量都是相同的。最大池化层全是2*
      2。
    • 每经过一个pooling层后,channel的数量会乘上2.
      也就是说,每次池化之后,Feature Map宽高降低一半,通道数量增加一倍。VGGNet网络层数更多,结构更深,模型参数量更大。

    VGGNet的意义:

    • 证明了更深的网络,能更好的提取特征。
    • 成为了后续很多网络的backbone。

    2.5 GoogleNet/Inception v1

    在设计网络结构时,不仅仅考虑网络的深度,也会考虑网络的宽度,并将这种结构定义为Inception结构(一种网中网(Network in Network)的结构,即原来的节点也是一个网络)。
    值得一提的是,GoogleNet网络的参数量只有6.9兆,模型大小大约50M.
    为什么GoogleNet网络的参数这么少呢?我们先来看一下它的基本单元的结构:
    在这里插入图片描述
    主要原因就是它有效的利用了1* 1 的卷积核。不同于VGGNet从上到下的类似于一个串的结构,Inception的结构表现为一个网中网的结构。也就是说,对于我们中间的一个隐藏层层,它的每个节点也都是一个卷积网络。对于前一层传入进来的特征图,这层的每一个节点对它进行了1* 1 ,3* 3,5* 5的卷积和3* 3的pooling操作。其中值得一提的是,在3* 3和5* 5 的卷积操作之前,该网络用1* 1 的卷积核降低了输入层的channel的数量。例如:我们的输入是一个56* 56 * 128维的这么一个特征(这时候128就是我们channel的数量)。我们通过一个1* 1 的卷积核,可以将通道数降为32,然后我们将它再输入到3* 3的卷积核中。大大减少了计算量。最后,我们将所有的Feature Map进行连接,最后得到这个层的输出。
    在ZFNet的学习中我们知道,更深层的网络收敛的速度就越慢。在GoogleNet中,为了保证网络更深之后,能够哦收敛的比较好,它采用了两个loss来对网络参数进行调节,进而确保在网络变深之后,依然能够达到一个比较好的收敛效果。
    这里需要解释一下什么叫网络宽度:网络深度指的是当前的这个网络一共有多少层,宽度则是说在同一层上channel的数量。
    在这里插入图片描述
    这里我们举了一个例子,来说明如何通过1* 1 的卷积核来进行计算量的一个节省,以及参数规模的一个降低。大家自行体会。

    2.6 Inception v2/v3

    在提出了Inception v1之后,google又提出了Inception v2/v3/v4.在前面介绍视觉感受野的时候,我们曾经说过,一个大的卷积核可以由多个小的卷积核来替代。在v2/v3中,他们有效的利用了这个知识。在Inceptiion v2中,伟大的作者们通过两层3* 3的卷积核代替掉了5* 5的卷积核。而在Inception v3中,更是桑心病狂 别出心裁的用n* 1 + 1* n的卷积核代替了n* n的卷积核。
    在这里插入图片描述
    通过这样的操作,我们能够实现什么样的效果呢?

    • 参数量降低,计算量减少。
    • 网络变深,网络非线性表达能力更强(因为在每一个卷积层后面都可以增加一个激活层)

    要注意的是,在实验中伟大的先行者们发现,并不是拆分都能达到很好的效果。卷积的拆分最好是用在中间的部分,不要在图像的开始就进行这样的拆分。

    2.7 ResNet

    它是在2015年,有何凯明团队提出,引入了跳连的结构来防止梯度消失的问题,进而可以进一步加大网络深度。它的结构如下所示:
    在这里插入图片描述
    跳连的结构如下所示:
    在这里插入图片描述
    可以发现,其他的网络中,都是从上到下的串联的结构 ,而resnet网络则是跳连结构,它的意思是将输入特征直接传输到输出层,和经过卷积之后的特征相加,共同组成输出层的一部分。
    那么,为什么通过跳连结构就可以加深网络的深度呢?在VGG网络中,我们知道当网络深度达到一定界限的时候,在训练中就较难收敛。较难收敛的原因就是随着网络深度的加深,产生了梯度消失的问题。什么是梯度消失呢?有基础的人应该知道,卷积神经网络在进行BP时,都是通过梯度来计算权重修改量的。而梯度的计算遵循的是链式法则,即一个参数的梯度是多个梯度相乘之后的结果。假如每个梯度都小于1的话,那么,x1 * x2* x3* x4…,当n趋于无穷的时候,limxn=0,即梯度消失。假如每个梯度都大于1的话,那么,x1 * x2 x3 * x4…,当n趋于无穷的时候,limxn=正无穷,即梯度爆炸。(这里的n其实就是卷积的层数)所以理论上来说,伴随着网络的加深,我们可以提取到更好的特征,但是网络的参数是非常难以调节的,因为这时候我们求解出来的梯度是没办法来调节参数的。而resnet通过跳连的结构,就可以缓解这个问题。
    我们可以很清楚的从跳连结构示意图中看到,加入了跳连结构之后,并没有增加模型的参数量,尽管它改变了网络结构。
    从ResNet的网络结构中我们可以发现,它在一开始时设置卷积核大小为7
    7,这是因为一开始的时候我们的输入图像的channel只有3,与7* 7的卷积核进行计算的话并不会增加多少计算量。而在ResNet网络的最后,伟大的作者们又一次别出心裁,用average pool层代替了全连接层。这一手操作也是大大的降低了参数量和计算量。因为我们知道,全连接层的参数多,且计算最为复杂,在VGG中,全连接层的参数量占到了总参数量的80%。而pooling层并没有参数。
    接下来我们来讨论一下,为什么ResNet网络可以缓解梯度消失的问题呢? 跳连结构实际上也被称为恒等映射:H(x)=F(x)+x。当F(x)=0时,H(x)=x,这就是所谓的恒等映射。这个跳连的这根线,可以实现差分放大的效果,将梯度放大,来缓解梯度的消失(具体的我也不太明白,等以后有时间再更一篇专门写的吧)。举个例子,假设F(x)=2x,当x从5变化成为5.1时,F(x)从10变为10.2.如果这时候求F(x)的导数的话,公式为(10.2-10)/(5.1-5)=2.而如果变成H(x)的话,导数为(10.2+5.1-(10.0+5))/(5.1-5)=3.这样就放大了导数,即梯度。
    在ResNet中有两种跳连结构:
    在这里插入图片描述
    左边的是当层数较小时,不用1* 1的卷积核来降低参数量和计算量,后面的是在50,101,152层的网络中,用1* 1 的卷积核来降低参数量和计算量。
    在ResNet中,除了跳连结构之外,它还采用了BatchNormalization批归一化来对数据scale和分布进行约束,同时BN层也可以进行简单的正则化,提高网络抗过拟合能力(每个卷积之后配合一个BN层)。
    ResNet的设计特点:

    • 核心单元简单堆叠。
    • 跳连结构解决网络梯度消失问题。
    • Average Pooling层代替fc层。
    • BN层加快网络训练速度和收敛时的稳定性。
    • 加大网络深度,提高模型的特征抽取能力。

    **

    3.卷积神经网络结构对比

    **

    在这里插入图片描述

    展开全文
  • 卷积神经网络综述

    千次阅读 2019-02-25 14:51:38
    下面来简单介绍和归纳总结一下国内外卷积神经网络的结构,分析一下卷积神经网络的基本原理,阐述一下卷积神经网络在图像识别中的相关应用及取得的最新研究成果。 卷积神经网络是人工神经网络与深度学习相结合,通过...

    下面来简单介绍和归纳总结一下国内外卷积神经网络的结构,分析一下卷积神经网络的基本原理,阐述一下卷积神经网络在图像识别中的相关应用及取得的最新研究成果。

    卷积神经网络是人工神经网络与深度学习相结合,通过反向传播算法训练卷积神经网络中的权重,从而实现深度学习的方法。卷积神经网络不仅具有传统神经网络的较好容错性、自适应性和较强自学习能力等优点,还具有自动提取特征、权值共享以及输入图像与网络结构结合良好等优势。卷积神经网络使用标准的反向传播算法进行训练,参数估计的数量比较少,相比于其他网络结构更容易训练。此外,卷积神经网络是采用局部感知区域、共享权值和空间域上的降采样,相对于位移、缩放和扭曲,具有稳定不变的特性。权值共享网络结构能够降低网络模型的复杂度,从而降低权值的个数。权值共享网络使得图像可以直接作为网络的输入,自动识别图像特征,提高图像识别的精度和效率。

    卷积神经网络在图像识别中的应用,已受到业界青睐,相关专家已总结出性能较好的网络结构。Lecuny等提出了Lenet-5模型,采用交替连接的卷积层和下采样层对输入图像进行前向传导,并且认为,通过全连接层输出概率分布的结构是当前可以普遍采用的卷积神经网络结构模型,Lenet-5模型虽然在手写字符识别领域取得了成功,但也存在需要大型训练集、过拟合以及硬件要求高等缺点。对于网络结构Lenet-5存在的弊端,KrizhevskyA等提出了网络结构AlexNet,它具有5层卷积网络,约65万个神经元以 及6000万个可训练参数,Simonyan K等 在AlexNet的基础上,针对卷积神经网络的深度进行研究,提出了VGG网络,证明网络深度的提升有助于改善图像分类的精度,而且将VGG的最佳网络深度设定在16-19层,卷积神经网络在图像识别中具有巨大的应用空间,主要应用在交通标志识别、车牌字符识别、人脸识别等领域。赵志宏等将卷积神经网络应用在车牌字符识别中,识别速度明显高于其他方法,达到了很好的应用效果。李飞鹏等将卷积神经网络应用于手写体数字 识别,达到了较高的识别精度,黄琳等将卷积神经网络应用在交通标志识别中,提高了识别的效率。

    卷积神经网络包括输入层、隐藏层和输出层。隐藏层是卷积神经网络的重要组成部分。卷积神经网络向前传播可得出输出值,
    反向传播则可调节偏置和权值。经典的CNN包括卷积层、降采样层和全连接层,除输入层外每层都有训练参数,采用滑动卷积窗口的方法对输入图像进行卷积,卷积核是卷积层的重要组成部分。特征提取器是卷积核的本质,其主要作用是自动提取输入信号的深层信息。降采样层用来实现对特征图的采样处理,在减少数据量的同时保留有用的信息,使CNN具有抗畸变的能力。全连接层一般位于网络尾端,对前面逐层变换和映射提取的特征进行回归分类等处理。全连接层也可作为输出层使用。

    卷积层的下一层是子采样层。子采样层主要是采集图像的信息,根据图像特征局部联系性原理提取主要信息,达到减少数据处理量的效果。其作用是降低图像的分辨率,减少训练维数,增强网络对图像大小变化的适应性。子采样层可再次提取图像重要信息并获得局部均值。经过图像的二次特征提取,子采样层提高了抗畸变能力。

    整个卷积神经网络结构包括一个输入层、两个卷积层、两个子采样层和一个输出层。图像信息经过卷积核滤波器Sigmoid函数,赋予偏置后产生3组特征映射图。对每组特征映射图的4个像素取平均值,得到S2子采样层特征映射图。对这些特征映射图再次滤波和采样,可得到C3层和S4层。将S4层的像素并连成一个列向量后与输出层全连接。

    卷积神经网络属于局部连接网络,是基于深刻研究自然图像而提出来的。自然图像存在局部区域稳定的属性,其某一局部区域的统计特征相对于图像其他相邻局部区域具有相似性。因此,神经网络从自然图像中学习到的某一局部区域特征同样适合于图像的其他相邻局部区域。随着科学技术的迅速发展,图像的应用越来越广泛,图像处理已经成为研究人员关注的焦点。图像识别是图像处理的前提,相关学者把卷积神经网络应用于图像识别领域,以期提高图像识别的精度和效率。

    由于图像识别问题的多样性和复杂性,目前的图像识别主要针对特定的识别问题,而手写体数字识别并不能在物体识别中获得应用,还具有很大的局限性。卷积神经网络在图像识别应用中具有巨大的发展空间,它能够改善网络结构和深度,通过大量的训练和有效算法得出一个通用的识别系统,可提高图像识别的效率和精度。由Lecuny提出的Lenet图像识别通用网络 结构,在很多图像识别中识别效果良好。

    随着卷积神经网络深度和网络结构的改善,卷积神经网络在图像识别中的识别精度和速度得以提高,图像识别的领域逐渐扩大,
    功能也日益强大,越来越多的识别问题都能通过卷积神经网络来解决。但是,由于卷积神经网络结构的复杂性而需要漫长的训练,运用成本较高;并且,因网络结构缺乏通用性,解决问题时具有很大的局限性。为了使卷积神经网络在图像识别领域应用更加广泛,需要研究通用的图像识别系统,卷积神经网络也需要改变网络的结构和深度。因为网络结构中过滤器的大小直接影响训练过程和识别精度,所以过滤器尺寸合适才能满足图像识别应用的要求,在图像识别中,卷积神经网络的深度是根据具体问题选择的,并由人工预选后通过试验选定较合适的深度值,这显然限制了网络结构的通用性。因此,应根据不同的图像识别问题,选择近似通用的网络结构深度。

     

     

     

     

    展开全文
  • python3_实现BP神经网络 + BP神经网络应用实例

    万次阅读 多人点赞 2018-07-29 22:10:28
    1.BP神经网络简介 BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。 优点:具有任意复杂的模式分类能力和优良的...

    0.目录

    1.BP神经网络简介

    2.前期理论准备

    2.算法数学原理

    (一)符号说明

    (二)公式推导

    3.python实现(python3编程实现)

    (一)sigmoid函数

    (二)BP主函数实现

    4.数据格式

    1.BP神经网络简介

    BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。

    目录

    0.目录

    1.BP神经网络简介

    2.前期理论准备

    2.算法数学原理

    (一)符号说明

    (二)公式推导

    3.python实现(python3编程实现)

    (一)sigmoid函数

    (二)BP主函数实现

    4.数据格式


    优点

    • 1.具有任意复杂的模式分类能力和优良的多维函数映射能力,解决了简单感知器不能解决的异或问题的问题(参考博客:https://www.jianshu.com/p/a25788130897 或 https://www.cnblogs.com/xym4869/p/11282469.html
    • 2.从结构上讲,BP神经网络具有输入层、隐含层和输出层
    • 3.从本质上讲,BP算法就是以网络误差平方目标函数、采用梯度下降法来计算目标函数的最小值。基本BP算法包括信号的前向传播误差的反向传播两个过程。

    缺点

    • 1.学习速度慢,即使是一个简单的过程,也需要几百次甚至上千次的学习才能收敛。
    • 2.容易陷入局部极小值
    • 3.网络层数、神经元个数的选择没有相应的理论指导
    • 4.网络推广能力有限。

    应用

    • 1.函数逼近
    • 2.模式识别
    • 3.分类
    • 4.数据压缩

    2.前期理论准备

    网络训练的目标:找到合适的权值和阈值,使得误差E最小。

    sigmoid函数:在信息科学当中,由于其单增以及其反函数单增等性质,sigmoid函数常被用作神经网络的阈值函数,将变量映射当0和1之间。(该函数的对x的求导也应该理解)

    2.算法数学原理

    (一)符号说明

    Xi: 输入信号。

    Xd: 隐层的阈值(是从求和函数中-θ中分离出的-1)。

    Vih: 第h个隐层神经元所对应输入信号Xi的权值。

    αh: 第h个隐层神经元的输入。

    -γh=--1*γh:隐层神经元的阈值。

    bh: 第h个隐层神经元的输入。

    ωhj: 第j个输出层神经元所对应的隐层神经元输出bh的权值。

    -θj=-1*θj:  输出层神经元的阈值(bq)

    :第j个输出层神经元的输出(预测输出值,yj为真实值)

    (二)公式推导

    通过公式变换可得输出层权值与阈值的变化量:

    同理可得隐层权值和阈值的变化量:

    3.python实现(python3编程实现)

    (一)sigmoid函数

    def sigmoid(x):
        """
        隐含层和输出层对应的函数法则
        """
        return 1/(1+np.exp(-x))
    

    (二)BP主函数实现

    def BP(data_tr, data_te, maxiter=600):
    
        # --pandas是基于numpy设计的,效率略低
        # 为提高处理效率,转换为数组
        data_tr, data_te = np.array(data_tr), np.array(data_te)
    
        # --隐层输入
        # -1: 代表的是隐层的阈值
        net_in = np.array([0.0, 0, -1])
        w_mid = np.random.rand(3, 4)          # 隐层权值阈值(-1x其中一个值:阈值)
    
        # 输出层输入
        # -1:代表输出层阈值
        out_in = np.array([0.0, 0, 0, 0, -1])
        w_out = np.random.rand(5)             # 输出层权值阈值(-1x其中一个值:阈值)
        delta_w_out = np.zeros([5])           # 存放输出层权值阈值的逆向计算误差
        delta_w_mid = np.zeros([3, 4])        # 存放因此能权值阈值的逆向计算误差
        yita = 1.75                           # η: 学习速率
        Err = np.zeros([maxiter])             # 记录总体样本每迭代一次的错误率
    
        # 1.样本总体训练的次数
        for it in range(maxiter):
    
            # 衡量每一个样本的误差
            err = np.zeros([len(data_tr)])
    
            # 2.训练集训练一遍
            for j in range(len(data_tr)):
                net_in[:2] = data_tr[j, :2]                       # 存储当前对象前两个属性值
                real = data_tr[j, 2]
    
                # 3.当前对象进行训练
                for i in range(4):
                    out_in[i] = sigmoid(sum(net_in*w_mid[:, i]))  # 计算输出层输入
                res = sigmoid(sum(out_in * w_out))                # 获得训练结果
    
                err[j] = abs(real - res)
    
                # --先调节输出层的权值与阈值
                delta_w_out = yita*res*(1-res)*(real-res)*out_in  # 权值调整
                delta_w_out[4] = -yita*res*(1-res)*(real-res)     # 阈值调整
                w_out = w_out + delta_w_out
    
                # --隐层权值和阈值的调节
                for i in range(4):
                    # 权值调整
                    delta_w_mid[:, i] = yita * out_in[i] * (1 - out_in[i]) * w_out[i] * res * (1 - res) * (real - res) * net_in
                    # 阈值调整
                    delta_w_mid[2, i] = -yita * out_in[i] * (1 - out_in[i]) * w_out[i] * res * (1 - res) * (real - res)
                w_mid = w_mid + delta_w_mid
            Err[it] = err.mean()
        plt.plot(Err)
        plt.show()
    
        # 存储预测误差
        err_te = np.zeros([100])
    
        # 预测样本100个
        for j in range(100):
            net_in[:2] = data_te[j, :2]                         # 存储数据
            real = data_te[j, 2]                                # 真实结果
    
            # net_in和w_mid的相乘过程
            for i in range(4):
                # 输入层到隐层的传输过程
                out_in[i] = sigmoid(sum(net_in*w_mid[:, i]))
            res = sigmoid(sum(out_in*w_out))                    # 网络预测结果输出
            err_te[j] = abs(real-res)                           # 预测误差
            print('res:', res, ' real:', real)
        
        plt.plot(err_te)
        plt.show()
    
    
    
    
    if "__main__" == __name__:
    
        # 1.读取样本
        data_tr = pd.read_csv("5.2 data_tr.txt")
        data_te = pd.read_csv("5.2 data_te.txt")
        BP(data_tr, data_te, maxiter=600)

    4.数据格式

    训练集、测试集下载链接见置顶评论:

    https://download.csdn.net/download/admin_maxin/19844122

    展开全文
  • 卷积神经网络架构

    万次阅读 多人点赞 2018-11-20 17:14:48
    卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的问题。 1.全连接神经网络和...

    卷积神经网络(conv)架构

    卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的问题。

    1.全连接神经网络和卷积神经网络的区别

    全连接神经网络:
    在这里插入图片描述
    卷积神经网络图:
    在这里插入图片描述
    共同点: 图中每一个节点都代表一个神经元,没相邻两层之间的节点都有边相;输入输出的流程基本一致。
    不同点: 卷积神经网络相邻两层之间只有部分的节点相连,所以一般会将每一层的卷积层组织成一个三维矩阵。
    卷积神经网络的优点: 在图像处理方面,对于MNIST数据,每一张图片的大小是28281,其中28*28为图片的大小,1表示只有一个彩色通道,并且这里的图像的颜色为黑白。假设第一层隐藏层的节点数位500个,那么一个全连接层的神经网络将有28 * 28 * 500+500=392500个参数。其中**+500**表示的是basic值。而当图片更大的时候,通道数增加的的时候,所需要的参数的数量会更大,会达到百万级,甚至千万级。随着参数的增多,计算速度会随之减慢,还容易导致过度拟合问题。

    2.卷积神经网络

    卷积神经网络构架图:
    在这里插入图片描述

    1.输入层

    在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。通常为(length * width *channel)。 三维矩阵的深度代表了图像的彩色通道(channel)。比如黑白图片的深度为1,而在RGB色彩模式下,图像的深度为3。从输入层开始,卷积神经网络通过不同的神经网络结构将上一层的三维矩阵转化为下一层的三维矩阵,直到最后的全连接层。

    2.卷积层

    是卷积网络中最为重要的部分。和传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块,这个小快常用的大小有3 * 3或者5 * 5,卷积层会增加原始节点的深度。通常卷积层这部分被称为过滤器(filetr) 或者 内核(kernel)
    过滤器: 将当前的神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵,但深度不限的节点矩阵。
    过滤器示意图:
    在这里插入图片描述
    过滤器的尺寸: 过滤器的所处理的节点矩阵的长和宽就是这个过滤器的长和宽的尺寸。而过滤器的深度则是有需要人工指定设置和处理的。
    卷积层例子: 过滤器将一个 2 * 2 * 3 的节点矩阵变化为一个1 * 1 * 5的单位节点矩阵。那么该卷积层的需要**2 * 2 * 2 3 5 + 5 = 65 个参数。其中最后的+5为偏置项的个数。假设用wi来表示第i个权重,bi表示偏置项的参数。上述所示的公式为:
    在这里插入图片描述
    传播的过程: 卷积层的前向传播过程是将一个过滤器从神经网络当前层的 左上角移动到右下角,并且在移动过程中计算每一个对应的单位矩阵。移动的例图 (步长为1)在这里插入图片描述
    全0填充(zero-padding)–改变结果矩阵的大小(1): 为了 避免尺寸的变化,可以在当前层矩阵的边界加入全0填充。这样可以使得卷积层前向传播结果的矩阵大小和当前层矩阵保持一致。示意图:
    在这里插入图片描述
    **改变移动步长–改变结果矩阵的大小(2):**当改变过滤器的移动步长,可以改变结果矩阵的尺寸大小,示意图:
    在这里插入图片描述
    计算结果矩阵的大小的尺寸:
    1.使用全0填充时:
    在这里插入图片描述
    2.不使用全0填充:
    在这里插入图片描述
    in_length:输入节点的长度,in_width:输入节点的宽度,side_length:移动的步长,filter_length过滤器的长度,filter_width表示过滤器的宽度。

    3.池化层(Pooling)

    池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。池化操作可以认为是将一张分辨率较高的图片转化为分辨率较低的图片。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中的参数的目的。
    效果: 使用池化层既可以加快计算速度也可以防止过度拟合
    使用: 同样类似卷积层,但是并不是计算节点的加权和,而是采用更加简单的最大值或者平均值运算最大池化层(max pooling) 使用最大值操作,是被使用得最多的池化层结构。平均池化层(average pooling) 使用平均值操作。注意: 池化层不仅需要在长和宽的维度上移动,它还需要在深度的维度上移动,且每次的过滤器可能是 不同的 。如图:
    在这里插入图片描述

    4.全连接层

    在经过几轮的卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提出的过程。在此之后,我们仍需使用全连接层来完成分类任务。

    5.Softmax层。

    Softmax层主要用于分类问题,我们可以得到当前样例属于不同种类的概率分布情况。

    以上所有内容均为小编在看书后做的一些笔记总结。

    展开全文
  • 基于BP神经网络PID控制+Simulink仿真

    万次阅读 多人点赞 2019-05-30 10:58:30
    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。 神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控制。利用BP神经网络可以...
  • CNN卷积神经网络原理详解(上)

    万次阅读 多人点赞 2019-10-18 23:59:17
    CNN卷积神经网络原理详解(上)前言卷积神经网络的生物背景我们要让计算机做什么?卷积网络第一层全连接层训练 前言 卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是...
  • MATLAB--基于BP神经网络的手写数字识别

    千次阅读 多人点赞 2020-03-06 21:12:13
    MATLAB–基于BP神经网络的手写数字识别 在干活的过程中整理下来的,希望对大家有帮助。 手写数字识别技术作为图像处理和模式识别中的研究热点,在大规模数据统计(如行业年检、人口普查等)、票据识别、财务报表、...
  • 第五章 卷积神经网络

    千次阅读 多人点赞 2020-01-13 07:49:37
    第五章 卷积神经网络第五章 卷积神经网络卷积一维卷积二维卷积互相关卷积的变种卷积的数学性质交换性导数卷积神经网络用卷积来代替全连接卷积层汇聚层(池化层)典型的卷积网络结构参数学习误差项的计算几种典型的卷积...
  • 神经网络模型简述 实例:交通运输能力预测设计 MATLAB程序及仿真结果 由于货物运输、地方经济及企业发展的紧密联系,因此作为反映货物运输需求的一项重要指标, 货运量预测研究和分析具有较强的实际意义。 常用的...
  • 本实验依托于教材《模式分类》第二版第六章(公式符号与书中一致)实验内容:设计编写BP神经网络和RBF神经网络,对给定数据集进行分类测试,并将分类准确率与SVM进行对比。实验环境:matlab2016a数据集:数据集大小3...
  • 机器学习——BP神经网络

    千次阅读 2019-05-30 20:18:37
    1.BP神经网络的思想: BP 神经网络的基本思想就是根据梯度下降法不断更新,输入,输出权值得到的模型。 BP(back propagation)神经网络是非线性不确定性数学模型,是一种具有连续传递函数的多层前馈人工神经网络,...
  • 一个简单的用于预测的BP神经网络模型

    万次阅读 多人点赞 2019-09-11 15:03:26
    一个简单的用于预测的BP神经网络模型 ...隐层根据自己的需要进行调整,该模型可直接进行运行,对于学习BP神经网络非常好。 %构建训练样本中的输入向量 P1= [3.67 2.32 3.67 2.32 3.67 2.32 3.67 ...
  • 小波神经网络学习程序

    千次阅读 多人点赞 2019-01-21 11:21:46
    下面来介绍一下MATLAB中的小波神经网络算法的实现过程: 1、用Mexihat函数作为样本输入和输出; 2、数据采用逐个处理,三层网络拓扑结构; 3、赋予网络学习速率和动量因子初始值; 4、初始化输出层和隐层的连接...
  • 机器学习-预测之BP神经网络模型原理及实战

    万次阅读 多人点赞 2019-03-17 15:14:39
    BP神经网络模型
  • 利用BP神经网络进行函数拟合

    万次阅读 多人点赞 2020-01-11 19:27:48
    利用BP神经网络进行函数拟合摘要关键词问题描述算法设计结果分析与讨论结论源代码 摘要 数据拟合是在假设模型结构已知的条件下最优确定模型中未知参数使预测值与数据吻合度最高,本文选取线性项加激活函数组成一个非...
  • BP神经网络:是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络神经网络是把生活中的常见情节推广到计算仿真的范畴,这样...
  • Elman神经网络介绍以及Matlab实现

    万次阅读 多人点赞 2018-06-28 19:27:15
    Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能力,增强了网络的全局稳定性,它比前馈型...
  • BP神经网络的MATLAB实现

    万次阅读 多人点赞 2017-05-18 15:56:04
    算法流程关于BP神经网络的公式推导,上一篇博文《BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式) 》已经做了详细的说明。接下来,我们利用MATLAB对BP神经网络进行实现。我们直接上代码,并进行解释。...
  • 【机器学习】广义回归神经网络(GRNN)的python实现

    万次阅读 多人点赞 2018-12-12 21:29:34
    【机器学习】广义回归神经网络(GRNN)的python实现一、广义回归神经网络原理1.1、GRNN与PNN的关系2.2、GRNN的网络结构二、广义回归神经网络的优点与不足2.1、优点2.2、不足三、GRNN的python实现参考资料 ...
  • 神经网络LSTM 时间预测

    热门讨论 2017-08-03 09:50:05
    RNN全称循环神经网络(Recurrent Neural Networks),是用来处理序列数据的。在传统的神经网络模型中,从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很...
  • 卷积神经网络图像识别python代码
  • ML笔记 - BP神经网络算法介绍

    千次阅读 多人点赞 2019-01-18 15:19:32
    人工神经网络的结构特点 BP神经网络的概念和特点 BP神经网络的思想 BP神经网络的步骤 BP神经网络设计 结构设计 神经元数 激活函数 参数设计 BP神经网络常用训练函数 防止过拟合 ...
  • PSO算法优化BP神经网络

    万次阅读 热门讨论 2019-01-20 20:17:01
    PSO算法和BP神经网络都是现在非常热门的两个算法,在各自的领域都担当着至关重要的作用,下面通过MATLAB中的一个实例来介绍一下如何将二者进行完美的结合,以发挥其最大优势: 1、在MATLAB的主界面编辑器中写入下列...
  • 神经网络-多层前馈神经网络

    千次阅读 2019-01-04 16:48:24
    神经网络-反向传播算法 神经网络-激活函数 神经网络是将许多个神经元按一定的层次结构连接起来的网络结构。不同的层次结构会产出不同类型神经网络,比如前馈神经网络和递归神经网络。 神经元 神经元是神经网络最...
  • matlab动态神经网络进行时间序列预测分析

    万次阅读 多人点赞 2018-02-25 10:45:02
    matlab动态神经网络进行时间序列预测分析 时间序列预测问题分类 有y,无x,即y(t)=f(y(t−1),y(t−2),...)y(t)=f(y(t−1),y(t−2),...)y(t)=f(y(t-1),y(t-2),...)(NAR) 有x,有y,即y(t)=f(x(t−1),x(t−2),......
  • 《MATLAB神经网络30个案例分析》学习笔记

    万次阅读 多人点赞 2016-09-04 20:53:31
    《MATLAB神经网络30个案例分析》学习记录(待更新):1. 数据分类,分类——多个输出,向量表示 [1 0 0] [0 1 0] [0 0 1]这样2. 分线性系统建模,拟合参数,用一定量的输入输出数据训练神经网络即可3. 遗传算法...
  • 实战+原理--手写数字识别--CNN卷积神经网络--matlab

    万次阅读 多人点赞 2019-04-13 23:27:09
    实战+原理–手写数字识别–卷积神经网络–matlab Marshal Zheng 2019-04-13 文章目录实战+原理--手写数字识别--卷积神经网络--matlabTargetDatasetDataset-converted into bmpTrainTestResultTheory about CNN ...
  • 本文综合整理常用的神经网络,包括生物神经网络、人工神经网络、卷积神经网络、循环神经网络、生成对抗网络;参考了许多高校的课程、论文、博客和视频等。文章的结构是先进行概念了解,然后结合图片、结构图、一步...
  • BP神经网络回归预测模型(python实现)

    万次阅读 多人点赞 2018-03-20 17:35:49
    神经网络模型一般用来做分类,回归预测模型不常见,本文基于一个用来分类的BP神经网络,对它进行修改,实现了一个回归模型,用来做室内定位。模型主要变化是去掉了第三层的非线性转换,或者说把非线性激活函数...
  • 《MATLAB神经网络编程》 化学工业出版社 读书笔记 第四章 前向型神经网络 4.3 BP传播网络 本文是《MATLAB神经网络编程》书籍的阅读笔记,其中涉及的源码、公式、原理都来自此书,若有不理解之处请参阅原书

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 525,547
精华内容 210,218
关键字:

动态神经网络需要神经网络