精华内容
下载资源
问答
  • 密集卷积神经网络
    2021-03-07 18:16:32

    An optimized dense convolutional neural network model for disease recognition and classification in corn leaf

    1、期刊信息

    期刊名:Computers and Electronics in Agriculture
    在这里插入图片描述

    2、研究思路

    关键词:人工智能、深度学习、玉米病害识别、卷积神经网络
    提出了一种优化的密集卷积神经网络结构用于玉米叶部病害的识别和分类,优化后的DenseNet模型准确率达到98.06%,参数和计算时间更少。

    3、研究现状介绍

    【1】张等人(2015)提出了一种***改进的遗传算法支持向量机***。作者收集并分类了6种玉米叶部病害。进行以下步骤对疾病进行分类:对于图像处理,将JPEG图像转换为BMP格式。
    【2】阿列根(2017)使用***KNN(K-近邻)和人工神经网络(ANN)分类算法***对三种类型的玉米叶部疾病(普通锈病、叶枯病、叶斑病)进行了分类。
    【3】张

    更多相关内容
  • 基于二值化密集卷积神经网络的表情识别算法.pdf
  • 三维循环密集卷积神经网络在视频手势识别的应用.pdf
  • 基于密集卷积神经网络的全卷积池化算法.pdf
  • 基于密集卷积神经网络的遥感飞机识别.pdf
  • 因此,基于密集卷积神经网络提出一种结合局部与全局特征的联合监督识别方法,以密集卷积神经网络为基础得到图像特征,通过结合局部特征(卷积神经网络特征)与全局特征(方向梯度直方图特征)进行分类,分类器目标...
  • 利用密集卷积神经网络的语音变换欺骗检测.pdf
  • 基于密集卷积神经网络的遥感影像超分辨率重建.pdf
  • 一种密集卷积神经网络的电视语音响度补偿方法.pdf
  • 卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。[1] 它包括卷积层(alternatingconvolutionallayer)和池层...

    卷积神经网络通俗理解

    卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法之一。

    卷积神经网络具有表征学习(representationlearning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariantclassification),因此也被称为“平移不变人工神经网络。

    卷积神经网络算法是什么?

    一维构筑、二维构筑、全卷积构筑AI爱发猫 www.aifamao.com

    卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法之一。

    卷积神经网络具有表征学习(representationlearning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariantclassification),因此也被称为“平移不变人工神经网络(Shift-InvariantArtificialNeuralNetworks,SIANN)”。

    卷积神经网络的连接性:卷积神经网络中卷积层间的连接被称为稀疏连接(sparseconnection),即相比于前馈神经网络中的全连接,卷积层中的神经元仅与其相邻层的部分,而非全部神经元相连。

    具体地,卷积神经网络第l层特征图中的任意一个像素(神经元)都仅是l-1层中卷积核所定义的感受野内的像素的线性组合。

    卷积神经网络的稀疏连接具有正则化的效果,提高了网络结构的稳定性和泛化能力,避免过度拟合,同时,稀疏连接减少了权重参数的总量,有利于神经网络的快速学习,和在计算时减少内存开销。

    卷积神经网络中特征图同一通道内的所有像素共享一组卷积核权重系数,该性质被称为权重共享(weightsharing)。

    权重共享将卷积神经网络和其它包含局部连接结构的神经网络相区分,后者虽然使用了稀疏连接,但不同连接的权重是不同的。权重共享和稀疏连接一样,减少了卷积神经网络的参数总量,并具有正则化的效果。

    在全连接网络视角下,卷积神经网络的稀疏连接和权重共享可以被视为两个无限强的先验(pirior),即一个隐含层神经元在其感受野之外的所有权重系数恒为0(但感受野可以在空间移动);且在一个通道内,所有神经元的权重系数相同。

    前馈神经网络、BP神经网络、卷积神经网络的区别与联系

    一、计算方法不同1、前馈神经网络:一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。

    2、BP神经网络:是一种按照误差逆向传播算法训练的多层前馈神经网络。3、卷积神经网络:包含卷积计算且具有深度结构的前馈神经网络。

    二、用途不同1、前馈神经网络:主要应用包括感知器网络、BP网络和RBF网络。

    2、BP神经网络:(1)函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数;(2)模式识别:用一个待定的输出向量将它与输入向量联系起来;(3)分类:把输入向量所定义的合适方式进行分类;(4)数据压缩:减少输出向量维数以便于传输或存储。

    3、卷积神经网络:可应用于图像识别、物体识别等计算机视觉、自然语言处理、物理学和遥感科学等领域。联系:BP神经网络和卷积神经网络都属于前馈神经网络,三者都属于人工神经网络。因此,三者原理和结构相同。

    三、作用不同1、前馈神经网络:结构简单,应用广泛,能够以任意精度逼近任意连续函数及平方可积函数.而且可以精确实现任意有限训练样本集。2、BP神经网络:具有很强的非线性映射能力和柔性的网络结构。

    网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。3、卷积神经网络:具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类。

    扩展资料:1、BP神经网络优劣势BP神经网络无论在网络理论还是在性能方面已比较成熟。其突出优点就是具有很强的非线性映射能力和柔性的网络结构。

    网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。但是BP神经网络也存在以下的一些主要缺陷。

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

    2、人工神经网络的特点和优越性,主要表现在以下三个方面①具有自学习功能。

    例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。自学习功能对于预测有特别重要的意义。

    预期未来的人工神经网络计算机将为人类提供经济预测、效益预测,其应用前途是很远大的。②具有联想存储功能。用人工神经网络的反馈网络就可以实现这种联想。③具有高速寻找优化解的能力。

    寻找一个复杂问题的优化解,往往需要很大的计算量,利用一个针对某问题而设计的反馈型人工神经网络,发挥计算机的高速运算能力,可能很快找到优化解。

    参考资料:百度百科—前馈神经网络百度百科—BP神经网络百度百科—卷积神经网络百度百科—人工神经网络。

    什么是卷积神经网络?为什么它们很重要

    卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

    [1]  它包括卷积层(alternatingconvolutionallayer)和池层(poolinglayer)。卷积神经网络是近年发展起来,并引起广泛重视的一种高效识别方法。

    20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(ConvolutionalNeuralNetworks-简称CNN)。

    现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。

    K.Fukushima在1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研工作者对该网络进行了改进。

    其中,具有代表性的研究成果是Alexander和Taylor提出的“改进认知机”,该方法综合了各种改进方法的优点并避免了耗时的误差反向传播。

    基于深度卷积神经网络进行人脸识别的原理是什么?

    本质上是模式识别,把现实的东西抽象成计算机能够理解的数字。如果一个图片是256色的,那么图像的每一个像素点,都是0到255中间的一个值,这样你可以把一个图像转换成一个矩阵。如何去识别这个矩阵中的模式?

    用一个相对来讲很小的矩阵在这个大的矩阵中从左到右,从上到下扫一遍,每一个小矩阵区块内,你可以统计0到255每种颜色出现的次数,以此来表达这一个区块的特征。

    这样通过这一次“扫描”,你得到了另一个由很多小矩阵区块特征组成的矩阵。这一个矩阵比原始的矩阵要小吧?那就对了!

    然后对这个小一点的矩阵,再进行一次上面的步骤,进行一次特征“浓缩”,用另一个意思来讲,就是把它抽象化。最后经过很多次的抽象化,你会将原始的矩阵变成一个1维乘1维的矩阵,这就是一个数字。

    而不同的图片,比如一个猫,或者一个狗,一个熊,它们最后得到的这个数字会不同。

    于是你把一个猫,一个狗,一个熊都抽象成了一个数字,比如0.34,0.75,0.23,这就达到让计算机来直接辨别的目的了。

    人脸,表情,年龄,这些原理都是类似的,只是初始的样本数量会很大,最终都是通过矩阵将具体的图像抽象成了数字,因为计算机只认识数字。但是抽象的函数,会有所不同,达到的效果也会不同。

    卷积神经网络主要做什么用的?

    卷积网络的特点主要是卷积核参数共享,池化操作。

    参数共享的话的话是因为像图片等结构化的数据在不同的区域可能会存在相同的特征,那么就可以把卷积核作为detector,每一层detect不同的特征,但是同层的核是在图片的不同地方找相同的特征。

    然后把底层的特征组合传给后层,再在后层对特征整合(一般深度网络是说不清楚后面的网络层得到了什么特征的)。而池化主要是因为在某些任务中降采样并不会影响结果。

    所以可以大大减少参数量,另外,池化后在之前同样大小的区域就可以包含更多的信息了。综上,所有有这种特征的数据都可以用卷积网络来处理。

    有卷积做视频的,有卷积做文本处理的(当然这两者由于是序列信号,天然更适合用lstm处理)另外,卷积网络只是个工具,看你怎么使用它,有必要的话你可以随意组合池化和卷积的顺序,可以改变网络结构来达到自己所需目的的,不必太被既定框架束缚。

    卷积神经网络为什么最后接一个全连接层

    在常见的卷积神经网络的最后往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图(featuremap)转化成(N*1)一维的一个向量全连接的目的是什么呢?

    因为传统的端到到的卷积神经网络的输出都是分类(一般都是一个概率值),也就是几个类别的概率甚至就是一个数--类别号,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。

    但是全连接的参数实在是太多了,你想这张图里就有20*12*12*100个参数,前面随便一层卷积,假设卷积核是7*7的,厚度是64,那也才7*7*64,所以现在的趋势是尽量避免全连接,目前主流的一个方法是全局平均值。

    也就是最后那一层的featuremap(最后一层卷积的输出结果),直接求平均值。有多少种分类就训练多少层,这十个数字就是对应的概率或者叫置信度。

     

    展开全文
  • DenseNet——密集连接的卷积神经网络

    千次阅读 2022-02-28 15:04:27
    ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(skip connection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。DenseNet模型基本思路与ResNet一致,但是它建立的是前面所有层与...

    前言

            ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(skip connection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。DenseNet模型基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),通过特征在channel上的连接来实现特征重用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,也因此斩获CVPR 2017的最佳论文奖。


            CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度,其核心是通过建立前面层与后面层之间的“短路连接”(shortcuts,skip connection),训练出更深的CNN网络。

            DenseNet模型基本思路与ResNet一致,但是它建立的是后面层与前面所有层的密集连接(Dense Connection)。其另一大特色是通过特征在channel维度上的连接来实现特征重用(Feature Reuse)。DenseNet缓解了梯度消失问题,加强了特征传播,鼓励了特征重用,并大大减少了参数的数量。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。        

            梯度消失问题在网络深度越深的时候越容易出现,原因是输入信息和梯度信息在很多层之间传递导致的,而Dense connection相当于每一层都直接连接input和loss,因此可以减轻梯度消失现象。

    二、相关工作

            现代网络中层数的增加放大了架构之间的差异,并激发了对不同连接模式的探索和对旧的研究思想的重新审视。早期以分层的方式训练完全连接的多层感知器。最近提出了用批处理梯度下降训练的全连接级联网络。虽然对小数据集有效,但这种方法只可以扩展到具有几百个参数的网络。通过短路连接来利用CNN中的多层次特征已被发现对各种视觉任务都是有效的。

            Highway网络是第一批提供了一种有效训练超过100层的端到端网络的手段的架构之一。使用旁路路径和门单元,数百层的Highway网络可以轻松地优化。旁路路径被认为是简化这些非常深的网络的训练的关键因素。ResNets进一步支持了这一点,其中纯恒等映射被用作旁路路径。ResNets在许多具有挑战性的图像识别、定位和检测任务上都取得了令人印象深刻的、破纪录的性能,如ImageNet和COCO目标检测。最近,随机深度被提出作为一种成功训练1202层ResNet的方法。随机深度通过在训练过程中随机删除图层来改进深度残差网络的训练。这表明并非所有的层都需要的,并强调了在深度残差网络中有大量的冗余。

           增加网络的宽度是使网络更深入的一种正交方法(例如,借助于短路连接的帮助)。GoogLeNet使用了一个“初始模块”,它连接了由不同大小的过滤器产生的特征映射。事实上,只要深度足够,简单地增加每个ResNets中的滤波器的数量就可以提高其性能。通过使用广泛的网络结构,框架集在多个数据集上也取得了有竞争力的结果。

            DenseNets没有从极其深或广泛的架构中获取表示能力,而是通过特征重用来利用网络的潜力,生成易于训练和高度参数化的压缩模型。连接由不同层学习到的特征图增加了后续层输入的变化,并提高了效率。这构成了数据网和重置网之间的主要区别。与同样连接不同层特征的初始网络相比,网络更简单、更高效。

            NIN(网络中的网络)结构将微多层感知器包含到卷积层的滤波器中,以提取更复杂的特征。在深度监督网络(DSN)中,内层直接由辅助分类器进行监督,这可以加强早期层所接收到的梯度。梯网将横向连接引入自动编码器,在半监督学习任务上产生令人印象深刻的准确性。深度融合网络(DFNs),通过结合不同基础网络的中间层来改善信息流。具有最小化重建损失路径的网络增强也可以改善图像分类模型。

    三、主要内容

    1、密集连接(Dense connectivity)

            为了进一步改善层之间的信息流,我们提出了一种不同的连接模式:我们引入了从任何层到所有后续层的直接连接。xl表示的是第l层的输出,第l层接收到的是前面l-1层的特征映射 [x0,x1, ……,xl−1] 指的是从第0层到第l−1层中产生的特征映射的连接

    2、复合函数(Composite function)

            将H(.)定义为三个连续操作的复合函数:批处理归一化(BN)、校正线性单元(ReLU)、3×3卷积(Conv)。

    3、池化层(Pooling layers)

            卷积网络的一个重要部分是改变特征映射大小的下采样层,为了便于在我们的架构中进行下采样,将网络划分为多个密集连接的密集块,我们将块之间的层称为过渡层,它可以进行卷积和池化,在实验中使用的过渡层包括批处理归一化层、1×1卷积层和2×2平均池化层。 

    4、增长率(Growth rate)

            如果每个函数H产生k个特征图,那么第l层有k0+k×(l−1)个输入特征图,其中k0是输入层的通道数。DenseNet和现有的网络架构之间的一个重要区别是,DenseNet可以有非常狭窄的层,例如,k=12。我们把超参数k称为网络的增长率。一个相对较小的增长率就足以在测试的数据集上获得最先进的结果。对此的一种解释是,每个层都可以访问其块中的所有前面的特征映射,因此,也可以访问网络的“集体知识”。人们可以将特征映射视为网络的全局状态。每一层都添加了k个自己的特征映射。增长率调节了每一层对全局状态贡献的新信息。全局状态一旦被写入,就可以从网络内的任何地方进行访问,而且与传统的网络架构不同,它不需要逐层复制它。

    5、瓶颈层(Bottleneck layers)

            虽然每一层只产生k个输出特性映射,但它通常有更多的输入。在每次3×3卷积之前,可以引入1×1卷积作为瓶颈层,以减少输入特征图的数量,既能降维减少计算量,又能融合各个通道的特征,从而提高计算效率。这种设计对DenseNet特别有效,将具有这种瓶颈层的网络,即BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)版本的H,称为DenseNet-B。在我们的实验中,我们让每个1×1的卷积产生4k个特征映射。

    6、压缩操作(Compression)

            为了进一步提高模型的紧致性,可以减少过渡层上的特征映射的数量。如果一个密集块包含m个特征映射,我们让下面的过渡层生成θm个输出特征图,其中0<θ≤1称为压缩因子。当θ=1时,跨过渡层的特征映射的数量保持不变。我们将使用θ<1的DenseNet称为DenseNet-C,并在实验中设置了θ=0.5。当同时使用了θ<1的瓶颈层和过渡层时,我们将我们的模型称为DenseNet-BC

    四、实验设置

            在除ImageNet之外的所有数据集上,我们实验中使用的DenseNet有三个密集的块,每个块都有相同数量的层。在进入第一个密集块之前,对输入图像进行16个(或DenseNet-BC增长率的两倍)输出通道的卷积。对于内核大小为3×3的卷积层,输入的每一边都被零填充一个像素,以保持特征映射的大小不变。我们使用1×1卷积,然后使用2×2平均池化作为两个相邻密集块之间的过渡层。在最后一个密集块的最后,执行一个全局平均池,然后附加一个softmax分类器。三个密集块的特征图大小分别为32×32、16×16和8×8。我们实验了配置{L=40,k=12},{L=100,k=12}和{L=100,k=24}的基本DenseNet结构。对于DenseNet-BC,评估配置为{L=100、k=12}、{L=250、k=24}和{L=190、k=40}的网络。

            在ImageNet上的实验中,我们在224×224输入图像上使用了一个具有4个密集块DenseNet-BC结构。初始卷积层包括2k卷7×7,步幅2;所有其他层的特征映射的数量也遵循设置k。我们在ImageNet上使用的确切网络配置如下示。所有网络的增长率均为k=32,表中所示的每个“conv”层都对应于序列BN-ReLU-conv。

    五、实验结果


    总结

            DenseNet核心思想在于建立了不同层之间的连接关系,充分利用了feature,进一步缓解了梯度消失问题。另外,利用瓶颈层和过渡层以及较小的增长率使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少了。

    展开全文
  • 针对传统计算机辅助检测系统中肺结节检测存在大量假阳性的问题,提出一种基于三维卷积神经网络的肺结节识别方法。首先,将传统二维卷积神经网络扩展为三维卷积神经网络,充分挖掘肺结节的三维特征,增强特征的表达能力;...
  • 针对大多数图像去雾算法模型参数估计准确性差及色彩失真等问题,提岀了一种端到端的密集连接扩张卷积神经网络。首先,通过使用多层密集连接结枃来増加网络的特征利用窣,避免网络加深时的梯度消失现象。其次,通过在...
  • 几种卷积神经网络

    2019-04-01 17:35:16
    卷积神经网络是本章介绍的重点,在这篇博文中我将结合一些简单的例子说明什么是卷积神经网络,以及简单介绍几个框架模型并用已经预训练的模型来解决一个简单分类问题。最后探索一下最新的深度可分离卷积...

    前言

    深度学习在计算机视觉(computer version)领域非常成功,举个简单的例子——让计算机分辨图片的上的动物是猫还是狗是非常难以实现的事情,但是借助于 卷积神经网络(CNN) 这是非常容易实现的事情。卷积神经网络是本章介绍的重点,在这篇博文中我将结合一些简单的例子说明什么是卷积神经网络,以及简单介绍几个框架模型并用已经预训练的模型来解决一个简单分类问题。最后探索一下最新的深度可分离卷积(参数更少运行效率更高)
    另:本系列的所有代码都以jupyter notebook格式托管到github上,大家可以去下载看下
    https://github.com/Wangzg123/KerasDeepLearningDemo

    一、卷积神经网络

    卷积神经网络(Convolutional Neural Networks)也就是我们常说的CNN,使用最频繁的领域就是计算机视觉领域,它在视觉上的表现是非常杰出的。我们先来看下图片在计算机中的表现形式。一张彩色照片通常有3个通道,分别是R(red)、G(green)和B(blue),每个像素一个颜色值,那么他们的堆叠就是一张图片。如下示(当然图片的像素点不会那么少)假如一张长480和宽480的彩色照片写成矩阵形式就是(480, 480,3)
    在这里插入图片描述

    1、什么是卷积神经网络

    卷积

    介绍完图片在计算机的表现之后,我们先来看下卷积计算,关于卷积先来看下下面的动图。假如有一张773的图片,那么我们通过一个f = 333,步长 = 2,填充层 = 0的卷积核(输入层的通道数等于卷积核的通道数)可以得到一个3 * 3的输出。我们这边来介绍下卷积计算的公式

    设一张n * n的图片,filter 是 f * f、padding是p,strided 是 s,那么经过卷积计算之后的size(向下取整)是
    [(n + 2p - f)/ s + 1, (n + 2p - f)/ s + 1]

    通过上面的公式可以得到目标的size是 [ (7 + 20 - 3)/2 + 1, (7 + 20 - 3)/2 + 1 ] = [ 3, 3],值得说明的是如果有两个卷积核,那么输出的形状就是 [ 3, 3, 2],其中2就是卷积核的个数,通过卷积计算我们就可以将图片的特征采集成不同的输出。
    在这里插入图片描述

    池化

    池化层用的方法有最大值池化(Max pooling) 和平均值池化(average pooling),而实际用的较多的是Max pooling。这里就说一下Max pooling,其实思想非常简单,就是把filter堆积在图片上输出最大的那个值。其中池化的公式也和卷积计算的公式一致,但在卷积神经网络中Maxpoing的fiter通常为22,stride=2 ,这样可以把一张nn的图片采样为n/2 * n/2的图片。
    在这里插入图片描述

    全连接层

    通过上面的介绍我们可以知道通过卷积、池化之后的输出是一个个小的图片,而在神经网络算法中我们是以下这种形式,那么全连接层的概念就是将这些“小图片”全部拉成一个长向量(flatten)然后乘以权重输出到我们的目标函数中即可
    在这里插入图片描述
    介绍完上面的卷积+池化+全连接层的概念,我们来看下这样的一个网络,假如这个网络是为了识别手写数字。这个网络的计算方式如下所示,通俗点说卷积神经网络就是不断的进行卷积池化计算,将特征不断提取的过程
    在这里插入图片描述

    2、关于卷积、池化的直观理解

    关于卷积计算,其实就是通过不同的filter提取图片的特征,如下示不同的卷积核(filter)可以提取不同的特征
    在这里插入图片描述
    池化我觉得下面的这个例子非常棒,非常直观的诠释了池化的直观理解
    在这里插入图片描述

    二、从头开始训练一个卷积神经网络

    我们接下来来做一个基于keras实现的一个猫狗识别的例子,从头训练一个卷积神经网络并实现可以自动识别出猫狗的模型,这篇代码选自《python深度学习》一书,更加详细的代码请查看我的github(见前言)

    # 导入库
    from keras import models
    from keras import layers
    # 定义一个序列模型
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(128, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(128, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Flatten())
    model.add(layers.Dropout(0.5))
    model.add(layers.Dense(512, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))
    model.compile(optimizer=optimizers.RMSprop(lr=1e-4), loss='binary_crossentropy', metrics=['acc'])
    # 数据增强
    train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
    test_datagen = ImageDataGenerator(rescale=1./255)
    train_generator = train_datagen.flow_from_directory(train_dir, target_size=(150, 150), batch_size=32, class_mode='binary')
    validation_generator = test_datagen.flow_from_directory(validation_dir, target_size=(150, 150), batch_size=32, class_mode='binary')
    # 开始训练
    history_first = model.fit_generator(train_generator, steps_per_epoch=100, epochs=100, validation_data=validation_generator, validation_steps=50)
    # 保存模型
    model.save('cats_and_dogs_small_2.h5')
    # 绘制曲线
    acc = history_first.history['acc']
    val_acc = history_first.history['val_acc']
    loss = history_first.history['loss']
    val_loss =history_first.history['val_loss']
    Epochs = range(1, len(loss) + 1)
    plt.plot(Epochs, acc, 'bo', label='Training acc')
    plt.plot(Epochs, val_acc, 'b', label='Validation acc')
    plt.xlabel('Epochs')
    plt.ylabel('Accuracy')
    plt.title('Training and Validation Accuracy')
    plt.legend()
    
    plt.figure()
    plt.plot(Epochs, loss, 'bo', label='Training loss')
    plt.plot(Epochs, val_loss, 'b', label='Validation loss')
    plt.xlabel('Epochs')
    plt.ylabel('loss')
    plt.title('Training and Validation loss')
    plt.legend()
    
    plt.show()
    

    在这里插入图片描述

    三、迁移学习

    想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络。预训练网络(pretrained network)是一个保存好的网络,之前已在大型数据集(通常是大规模图像分类任务)上训练好。如果这个原始数据集足够大且足够通用,那么预训练网络学到的特征的空间层次结构可以有效地作为视觉世界的通用模型,而使用这种预训练模型的方式就是——迁移学习

    1、几种卷积网络模型

    在介绍怎么进行迁移学习之前,我们先来学习下几种非常出名的卷积神经网络模型

    VGG

    VGGNet是牛津大学计算机视觉组和Google DeepMind公司一起研发的深度卷积神经网络,并取得了2014年Imagenet比赛定位项目第一名和分类项目第二名。该网络主要是泛化性能很好,容易迁移到其他的图像识别项目上,可以下载VGGNet训练好的参数进行很好的初始化权重操作,很多卷积神经网络都是以该网络为基础,比如FCN,UNet,SegNet等。vgg版本很多,常用的是VGG16,VGG19网络。网络架构如下示
    在这里插入图片描述

    Resnet

    残差神经网络的基本模块(Resnet),输入为x,输出为F(x)+x,F(x)代表网络中数据的一系列乘、加操作,假设神经网络最优的拟合结果输出为H(x)=F(x)+x,那么神经网络最优的F(x)即为H(x)与x的残差,通过拟合残差来提升网络效果。为什么转变为拟合残差就比传统卷积网络要好呢?因为训练的时候至少可以保证残差为0,保证增加残差学习单元不会降低网络性能,假设一个浅层网络达到了饱和的准确率,后面再加上这个残差学习单元可以保证梯度消失问题
    在这里插入图片描述

    Inception

    Inception也叫googlenet,目前已经有v1 v2 v3的多个版本,网络架构如下示,可以看到网络层架更深且也更复杂
    在这里插入图片描述

    2、预训练的模型

    如前所述,用于图像分类的卷积神经网络包含两部分:首先是一系列池化层和卷积层,最后是一个密集连接分类器。第一部分叫作模型的卷积基(convolutional base)。对于卷积神经网络而言,特征提取就是取出之前训练好的网络的卷积基,在上面运行新数据,然后在输出上面训练一个新的分类器
    在这里插入图片描述

    from keras.applications import VGG16
    from keras import models
    from keras import layers
    # 导入vgg16的模型,但不包括最后一层
    conv_base = VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3))
    # 定义一个模型并加入vgg16
    model = models.Sequential()
    model.add(conv_base)
    model.add(layers.Flatten())
    model.add(layers.Dense(256, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))
    # 冻结vgg层
    conv_base.trainable = False
    from keras.preprocessing.image import ImageDataGenerator
    from keras import optimizers
    train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, 
                                       shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest')
    test_datagen = ImageDataGenerator(rescale=1./255)
    # 引入数据集目录
    train_dir = r'E:\2--jupyter_notebook\python deeplearning\datasets\dog_cat_classify\cats_and_dogs_small\train'
    validation_dir = r'E:\2--jupyter_notebook\python deeplearning\datasets\dog_cat_classify\cats_and_dogs_small\validation'
    test_dir = r'E:\2--jupyter_notebook\python deeplearning\datasets\dog_cat_classify\cats_and_dogs_small\test'
    # 生成器
    train_generator = train_datagen.flow_from_directory(train_dir, target_size=(150, 150),batch_size=20,
    					class_mode='binary')
    validation_generator = test_datagen.flow_from_directory(validation_dir, target_size=(150, 150), batch_size=20, 		  	  
    						class_mode='binary')
    # 编译并训练模型
    model.compile(loss='binary_crossentropy', optimizer=optimizers.RMSprop(lr=2e-5), metrics=['acc'])
    history = model.fit_generator(train_generator, steps_per_epoch=100, epochs=30, validation_data=validation_generator, validation_steps=50)
    # 绘制曲线
    import matplotlib.pyplot as plt
    acc = history.history['acc']
    val_acc = history.history['val_acc']
    loss = history.history['loss']
    val_loss = history.history['val_loss']
    Epochs = range(1, len(loss) + 1)
    plt.plot(Epochs, acc, 'ro', label='Training acc')
    plt.plot(Epochs, val_acc, 'r', label='Validation acc')
    plt.xlabel('Epochs')
    plt.ylabel('Accuracy')
    plt.title('Training and Validation Accuracy')
    plt.legend()
    
    plt.figure()
    plt.plot(Epochs, loss, 'ro', label='Training loss')
    plt.plot(Epochs, val_loss, 'r', label='Validation loss')
    plt.xlabel('Epochs')
    plt.ylabel('loss')
    plt.title('Training and Validation loss')
    plt.legend()
    
    plt.show()
    

    在这里插入图片描述

    四、深度可分离卷积

    最后我们来看下深度可以分离卷积的例子,它是一种比较新的网络架构,其特点是参数更少运算更快,并且表现的准确度也和普通的卷积神经网络的模型差不多,如下所示的单元,传统卷积计算所需要的filter的参数是4608,而深度可分离卷积的参数个数是656,实验结果也表示其识别的准确度差不多。
    在这里插入图片描述

    五、总结

    以上介绍了卷积、池化和全连接的计算过程,也介绍了几个框架,如VGG、Inception等。并通过keras这个框架实现猫狗识别的例子,而后为了提高准确度而通过迁移学习来更改我们的模型来提升准确度,最后介绍了比较新的深度可分离卷积,这种网络比传统的卷积计算代价更低,和vgg等一样,基于深度可分离卷积的是Xception模型(有兴趣的可以自行学习)。其实在计算机视觉还有很多例子,比如人脸识别,yolo等,以后有机会我再总结发布博客吧。

    展开全文
  • 基于多尺度多列卷积神经网络密集人群计数模型.pdf
  • DenseCNN-ATT:实体关系抽取的密集连接卷积神经网络.pdf
  • 人工智能-基于卷积神经网络密集场景人数估计算法研究.pdf
  • 基于密集连接卷积神经网络的链路预测模型.pdf
  • 基于密集连接卷积神经网络的字符验证码识别.pdf
  • 注:本文源自本人的硕士毕业论文,未经许可,严禁转载!...在本章中,论文首先研究密集卷积网络(DenseNet)的结构和工作原理,随后本人提出一些改进意见,包括增加密集块中的层数、使用复合型综合函数...
  • 自学习稀疏密集连接卷积神经网络图像分类方法.pdf
  • 基于密集连接卷积神经网络的远程监督关系抽取.pdf
  • 卷积神经网络

    2021-05-17 21:47:33
    20 世纪 80年代,日本科学家 Kunihiko Fukushima在论文中介绍了神经认知网络模型,该模型可以看作是卷积神经网络的初期结构。 20 世纪 90 年代,Yann LeCun 等人提出 LeNet 模型,并成功应用于美国的邮政系统,用来...
  • 传统的机器学习方法已被更新和更强大的深度学习算法(例如卷积神经网络)取代。 但是,要真正理解和欣赏深度学习,我们必须知道为什么其他方法失败时它会成功。 在本文中,我们尝试通过对Fashion MNIST数据集应用各种...
  • 密集连接卷积神经网络:让人工智能拥有更强大脑.pdf
  • 密集连接扩张卷积神经网络的单幅图像去雾.pdf
  • 人工智能-基于卷积神经网络的静态图像密集人群计数算法研究.pdf
  • 结合残差密集块的卷积神经网络图像去噪方法.pdf
  • 本文提出了一种使用反馈自校正系统与密集连接卷积网络相结合的水质监测方法。 我们找到了一种有效的方法来校正模型输出,并创新了生物水质监测方法。 鱼类运动轨迹是所有文献中所使用的各种水质分类特征的综合表达,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,988
精华内容 5,595
关键字:

密集卷积神经网络