欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年2022年零基础入门深度学习-卷积神经网络 .pdf

    • 资源ID:39706514       资源大小:2.55MB        全文页数:20页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年2022年零基础入门深度学习-卷积神经网络 .pdf

    关闭零基础入门深度学习(4)-卷积神经网络机器学习深度学习入门无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,零基础入门深度学习系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章。虽然文中会有很多公式你也许看不懂,但同时也会有更多的代码,程序员的你一定能看懂的(我周围是一群狂热的Clean Code程序员,所以我写的代码也不会很差)。文章列表零基础入门深度学习(1)-感知器零基础入门深度学习(2)-线性单元和梯度下降零基础入门深度学习(3)-神经网络和反向传播算法零基础入门深度学习(4)-卷积神经网络零基础入门深度学习(5)-循环神经网络零基础入门深度学习(6)-长短时记忆网络(LSTM)零基础入门深度学习(7)-递归神经网络往期回顾在前面的文章中,我们介绍了全连接神经网络,以及它的训练和使用。我们用它来识别了手写数字,然而,这种结构的网络对于图像识别任务来说并不是很合适。本文将要介绍一种更适合图像、语音识别任务的神经网络结构卷积神经网络(Convolutional Neural Network,CNN)。说卷积神经网络是最重要的一种神经网络也不为过,它在最近几年大放异彩,几乎所有图像、语音识别领域的重要突破都是卷积神经网络取得的,比如谷歌的 GoogleNet、微软的 ResNet等,打败李世石的 AlphaGo也用到了这种网络。本文将详细介绍卷积神经网络以及它的训练算法,以及动手实现一个简单的卷积神经网络。一个新的激活函数 Relu最近几年卷积神经网络中,激活函数往往不选择sigmoid 或tanh函数,而是选择 relu 函数。Relu函数的定义是:Relu函数图像如下图所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -Relu函数作为激活函数,有下面几大优势:速度快 和sigmoid 函数需要计算指数和倒数相比,relu 函数其实就是一个 max(0,x),计算代价小很多。减轻梯度消失问题 回忆一下计算梯度的公式。其中,是sigmoid 函数的导数。在使用反向传播算法进行梯度计算时,每经过一层sigmoid 神经元,梯度就要乘上一个。从下图可以看出,函数最大值是 1/4。因此,乘一个会导致梯度越来越小,这对于深层网络的训练是个很大的问题。而relu 函数的导数是 1,不会导致梯度变小。当然,激活函数仅仅是导致梯度减小的一个因素,但无论如何在这方面 relu 的表现强于 sigmoid。使用relu 激活函数可以让你训练更深的网络。稀疏性 通过对大脑的研究发现,大脑在工作的时候只有大约5%的神经元是激活的,而采用sigmoid 激活函数的人工神经网络,其激活率大约是 50%。有论文声称人工神经网络在15%-30%的激活率时是比较理想的。因为relu 函数在输入小于 0时是完全不激活的,因此可以获得一个更低的激活率。全连接网络 VS 卷积网络全连接神经网络之所以不太适合图像识别任务,主要有以下几个方面的问题:参数数量太多 考虑一个输入 1000*1000像素的图片(一百万像素,现在已经不能算大图了),输入层有 1000*1000=100万节点。假设第一个隐藏层有 100个节点(这个数量并不多),那么仅这一层就有(1000*1000+1)*100=1 亿参数,这实在是太多了!我们看到图像只扩大一点,参数数量就会多很多,因此它的扩展性很差。没有利用像素之间的位置信息 对于图像识别任务来说,每个像素和其周围像素的联系是比较紧密的,和离得很远的像素的联系可能就很小了。如果一个神经元和上一层所有神经元相连,那么就相当于对于一个像素来说,把图像的所有像素都等同看待,这不符合前面的假设。当我们完成每个连接权重的学习之后,最终可能会发现,有大量的权重,它们的值都是很小的(也就是这些连接其实无关紧要)。努力学习大量并不重要的权重,这样的学习必将是非常低效的。网络层数限制 我们知道网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过 3层。因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。那么,卷积神经网络又是怎样解决这个问题的呢?主要有三个思路:局部连接 这个是最容易想到的,每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数。权值共享 一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。下采样 可以使用 Pooling 来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。对于图像识别任务来说,卷积神经网络通过尽可能保留重要的参数,去掉大量不重要的参数,来达到更好的学习效果。接下来,我们将详述卷积神经网络到底是何方神圣。卷积神经网络是啥首先,我们先获取一个感性认识,下图是一个卷积神经网络的示意图:网络架构如图1 所示,一个卷积神经网络由若干卷积层、Pooling 层、全连接层 组成。你可以构建各种不同的卷积神经网络,它的常用架构模式为:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 20 页 -I NPUT-CO NV*N-PO OL?*M-FC*K也就是N 个卷积层叠加,然后(可选)叠加一个 Pooling 层,重复这个结构 M 次,最后叠加 K个全连接层。对于图1 展示的卷积神经网络:I NPUT-CO NV-PO OL-CO NV-PO OL-FC-FC按照上述模式可以表示为:I NPUT-CO NV*1-PO OL*2-FC*2也就是:N=1,M=2,K=2。三维的层结构从图1 我们可以发现 卷积神经网络 的层结构和 全连接神经网络的层结构有很大不同。全连接神经网络每层的神经元是按照 一维 排列的,也就是排成一条线的样子;而卷积神经网络每层的神经元是按照 三维 排列的,也就是排成一个长方体的样子,有宽度、高度 和深度。对于图1 展示的神经网络,我们看到输入层的宽度和高度对应于输入图像的宽度和高度,而它的深度为1。接着,第一个卷积层对这幅图像进行了卷积操作(后面我们会讲如何计算卷积),得到了三个 Feature Map。这里的 3 可能是让很多初学者迷惑的地方,实际上,就是这个卷积层包含三个 Filter,也就是三套参数,每个 Filter都可以把原始输入图像卷积得到一个Feature Map,三个Filter就可以得到三个 FeatureMap。至于一个卷积层可以有多少个Filter,那是可以自由设定的。也就是说,卷积层的Filter个数也是一个 超参数。我们可以把 FeatureMap 可以看做是通过卷积变换提取到的图像特征,三个Filter就对原始图像提取出三组不同的特征,也就是得到了三个Feature Map,也称做三个通道(channel)。继续观察 图1,在第一个卷积层之后,Pooling 层对三个 Feature Map做了 下采样(后面我们会讲如何计算下采样),得到了三个更小的 FeatureMap。接着,是第二个 卷积层,它有5个Filter。每个Fitler都把前面 下采样 之后的 3个*Feature Map卷积在一起,得到一个新的Feature Map。这样,5个Filter就得到了 5个Feature Map。接着,是第二个 Pooling,继续对 5个Feature Map进行下采样*,得到了5个更小的 Feature Map。图1 所示网络的最后两层是全连接层。第一个全连接层的每个神经元,和上一层5个Feature Map中的每个神经元相连,第二个全连接层(也就是输出层)的每个神经元,则和第一个全连接层的每个神经元相连,这样得到了整个网络的输出。至此,我们对 卷积神经网络有了最基本的感性认识。接下来,我们将介绍卷积神经网络中各种层的计算和训练。卷积神经网络输出值的计算卷积层输出值的计算我们用一个简单的例子来讲述如何计算卷积,然后,我们抽象出 卷积层 的一些重要概念和计算方法。假设有一个 5*5的图像,使用一个 3*3的filter进行卷积,想得到一个 3*3的Feature Map,如下所示:为了清楚的描述 卷积 计算过程,我们首先对图像的每个像素进行编号,用表示图像的第行第 列元素;对 filter的每个权重进行编号,用表示第行第列权重,用表示filter的偏置项;对Feature Map的每个元素进行编号,用表示Feature Map的第 行第 列元素;用表示激活函数(这个例子选择 relu 函数 作为激活函数)。然后,使用下列公式计算卷积:例如,对于 Feature Map左上角元素来说,其卷积计算方法为:计算结果如下图所示:式名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 20 页 -接下来,Feature Map的元素的卷积计算方法为:计算结果如下图所示:可以依次计算出 Feature Map中所有元素的值。下面的动画显示了整个Feature Map的计算过程:上面的计算过程中,步幅(stride)为1。步幅可以设为大于 1的数。例如,当步幅为 2时,Feature Map计算如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 20 页 -我们注意到,当 步幅 设置为2的时候,Feature Map就变成2*2了。这说明图像大小、步幅和卷积后的Feature Map大小是有关系的。事实上,它们满足下面的关系:在上面两个公式中,是卷积后 Feature Map的宽度;是卷积前图像的宽度;是filter的宽度;是Zero Padding数量,ZeroPadding 是指在原始图像周围补几圈0,如果的值是1,那么就补 1圈0;是步幅;是卷积后 Feature Map的高度;是卷积前图像的宽度。式2和式3本质上是一样的。以前面的例子来说,图像宽度,filter宽度,Zero Padding,步幅,则说明Feature Map宽度是2。同样,我们也可以计算出Feature Map高度也是 2。前面我们已经讲了深度为 1的卷积层的计算方法,如果深度大于1怎么计算呢?其实也是类似的。如果卷积前的图像深度为D,那么相应的filter的深度也必须为 D。我们扩展一下 式1,得到了深度大于 1的卷积计算公式:在式4 中,D 是深度;F是filter的大小(宽度或高度,两者相同);表示filter的第层第行第列权重;表示图像的第层第 行第列像素;其它的符号含义和式1是相同的,不再赘述。我们前面还曾提到,每个卷积层可以有多个filter。每个filter和原始图像进行卷积后,都可以得到一个Feature Map。因此,卷积后Feature Map的深度(个数)和卷积层的 filter个数是相同的。下面的动画显示了包含两个filter的卷积层的计算。我们可以看到7*7*3 输入,经过两个 3*3*3filter的卷积(步幅为2),得到了 3*3*2 的输出。另外我们也会看到下图的Zero padding是1,也就是在输入元素的周围补了一圈0。Zero padding对于图像边缘部分的特征提取是很有帮助的。式式式名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 20 页 -以上就是卷积层的计算方法。这里面体现了局部连接 和权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且filter的权值对于上一层所有神经元都是一样的。对于包含两个3*3*3 的fitler的卷积层来说,其参数数量仅有(3*3*3+1)*2=56 个,且参数数量与上一层神经元个数无关。与 全连接神经网络相比,其参数数量大大减少了。用卷积公式来表达卷积层计算不想了解太多数学细节的读者可以跳过这一节,不影响对全文的理解。式4 的表达很是繁冗,最好能简化一下。就像利用矩阵可以简化表达全连接神经网络的计算一样,我们利用 卷积公式 可以简化 卷积神经网络的表达。下面我们介绍 二维卷积公式。设矩阵,其行、列数分别为、,则二维卷积公式如下:且,满足条件。我们可以把上式写成如果我们按照 式5 来计算卷积,我们可以发现矩阵A实际上是 filter,而矩阵 B是待卷积的输入,位置关系也有所不同:从上图可以看到,A左上角的值与B对应区块中右下角的值相乘,而不是与左上角的相乘。因此,数学 中的卷积和 卷积神经网络中的卷积还是有区别的,为了避免混淆,我们把卷积神经网络中的卷积操作叫做 互相关(cross-correlation)操作。式名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 20 页 -卷积 和互相关 操作是可以转化的。首先,我们把矩阵A翻转180度,然后再交换 A和B的位置(即把 B放在左边而把 A放在右边。卷积满足交换率,这个操作不会导致结果变化),那么卷积 就变成了 互相关。如果我们不去考虑两者这么一点点的区别,我们可以把式5代入到 式4:其中,是卷积层输出的 feature map。同 式4 相比,式6就简单多了。然而,这种简洁写法只适合步长为1的情况。Pooling 层输出值的计算Pooling 层主要的作用是 下采样,通过去掉 Feature Map中不重要的样本,进一步减少参数数量。Pooling 的方法很多,最常用的是MaxPooling。Max Pooling实际上就是在 n*n的样本中取最大值,作为采样后的样本值。下图是2*2 max pooling:除了Max Pooing之外,常用的还有 Mean Pooling取各样本的平均值。对于深度为 D 的Feature Map,各层独立做 Pooling,因此Pooling 后的深度仍然为 D。全连接层全连接层输出值的计算和上一篇文章零基础入门深度学习(3)-神经网络和反向传播算法讲过的 全连接神经网络是一样的,这里就不再赘述了。卷积神经网络的训练和全连接神经网络相比,卷积神经网络的训练要复杂一些。但训练的原理是一样的:利用链式求导计算损失函数对每个权重的偏导数(梯度),然后根据梯度下降公式更新权重。训练算法依然是反向传播算法。我们先回忆一下上一篇文章零基础入门深度学习(3)-神经网络和反向传播算法介绍的反向传播算法,整个算法分为三个步骤:1.前向计算每个神经元的 输出值(表示网络的第个神经元,以下同);2.反向计算每个神经元的 误差项,在有的文献中也叫做 敏感度(sensitivity)。它实际上是网络的损失函数对神经元 加权输入的偏导数,即;3.计算每个神经元连接权重的梯度(表示从神经元 连接到神经元的权重),公式为,其中,表示神经元 的输出。最后,根据梯度下降法则更新每个权重即可。对于卷积神经网络,由于涉及到局部连接、下采样 的等操作,影响到了第二步误差项的具体计算方法,而 权值共享 影响了第三步 权重的梯度 的计算方法。接下来,我们分别介绍卷积层和Pooling 层的训练算法。卷积层的训练对于卷积层,我们先来看看上面的第二步,即如何将误差项传递到上一层;然后再来看看第三步,即如何计算filter每个权值的梯度。卷积层误差项的传递最简单情况下误差项的传递我们先来考虑步长为 1、输入的深度为 1、filter个数为1的最简单的情况。假设输入的大小为 3*3,filter大小为2*2,按步长为 1卷积,我们将得到 2*2的 feature map。如下图所示:式名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 20 页 -在上图中,为了描述方便,我们为每个元素都进行了编号。用表示第层第 行第 列的误差项;用表示filter第行第列权重,用表示filter的 偏置项;用表示第层第 行第 列神经元的 输出;用表示第行神经元的 加权输入;用表示第 层第 行第 列的误差项;用表示第层的激活函数。它们之间的关系如下:上式中,、都是数组,是由组成的数组,表示卷积操作。在这里,我们假设第中的每个值都已经算好,我们要做的是计算第层每个神经元的 误差项。根据链式求导法则:我们先求第一项。我们先来看几个特例,然后从中总结出一般性的规律。例1,计算,仅与的计算有关:因此:例2,计算,与和的计算都有关:因此:例3,计算,与、和的计算都有关:因此:名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 20 页 -从上面三个例子,我们发挥一下想象力,不难发现,计算,相当于把第 层的sensitive map周围补一圈 0,在与180度翻转后的 filter进行cross-correlation,就能得到想要结果,如下图所示:因为卷积 相当于将 filter旋转180度的 cross-correlation,因此上图的计算可以用卷积公式完美的表达:上式中的表示第 层的filter的权重数组。也可以把上式的卷积展开,写成求和的形式:现在,我们再求第二项。因为所以这一项极其简单,仅求激活函数的导数就行了。将第一项和第二项组合起来,我们得到最终的公式:也可以将 式7写成卷积的形式:其中,符号表示element-wise product,即将矩阵中每个对应元素相乘。注意式8 中的、都是矩阵。以上就是步长为 1、输入的深度为 1、filter个数为1的最简单的情况,卷积层误差项传递的算法。下面我们来推导一下步长为S的情况。卷积步长为 S 时的误差传递我们先来看看步长为 S与步长为 1的差别。式式名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 20 页 -如上图,上面是步长为 1时的卷积结果,下面是步长为2时的卷积结果。我们可以看出,因为步长为2,得到的 feature map 跳过了步长为 1时相应的部分。因此,当我们反向计算误差项 时,我们可以对步长为 S的sensitivity map相应的位置进行补 0,将其还原成步长为 1时的sensitivity map,再用 式8进行求解。输入层深度为 D 时的误差传递当输入深度为 D 时,filter的深度也必须为 D,层的通道只与 filter的通道的权重进行计算。因此,反向计算误差项 时,我们可以使用式8,用filter的第通道权重对第层sensitivity map进行卷积,得到第层通道的sensitivity map。如下图所示:filter数量为N 时的误差传递名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 20 页 -filter数量为N 时,输出层的深度也为 N,第个filter卷积产生输出层的第个feature map。由于第层每个加权输入都同时影响了第 层所有feature map 的输出值,因此,反向计算误差项 时,需要使用全导数公式。也就是,我们先使用第个filter对第 层相应的第个sensitivity map进行卷积,得到一组 N 个层的偏sensitivity map。依次用每个 filter做这种卷积,就得到 D 组偏sensitivity map。最后在各组之间将 N 个偏sensitivity map 按元素相加,得到最终的 N 个层的sensitivity map:以上就是卷积层误差项传递的算法,如果读者还有所困惑,可以参考后面的代码实现来理解。卷积层filter权重梯度的计算我们要在得到第层sensitivity map的情况下,计算 filter的权重的梯度,由于卷积层是权重共享 的,因此梯度的计算稍有不同。如上图所示,是第层的输出,是第 层filter的权重,是第 层的sensitivity map。我们的任务是计算的梯度,即。为了计算偏导数,我们需要考察权重对的影响。权重项通过影响的值,进而影响。我们仍然通过几个具体的例子来看权重项对的影响,然后再从中总结出规律。例1,计算:从上面的公式看出,由于权值共享,权值对所有的都有影响。是、.的函数,而、.又是的函数,根据 全导数 公式,计算就是要把每个偏导数都加起来:例2,计算:通过查看与的关系,我们很容易得到:实际上,每个 权重项 都是类似的,我们不一一举例了。现在,是我们再次发挥想象力的时候,我们发现计算规律是:也就是用 sensitivity map作为卷积核,在 input 上进行 cross-correlation,如下图所示:式名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 20 页 -最后,我们来看一看偏置项的梯度。通过查看前面的公式,我们很容易发现:也就是 偏置项 的梯度 就是sensitivity map所有 误差项 之和。对于步长为 S的卷积层,处理方法与传递*误差项*是一样的,首先将 sensitivity map还原成步长为 1时的sensitivity map,再用上面的方法进行计算。获得了所有的 梯度 之后,就是根据 梯度下降算法来更新每个权重。这在前面的文章中已经反复写过,这里就不再重复了。至此,我们已经解决了卷积层的训练问题,接下来我们看一看Pooling 层的训练。Pooling 层的训练无论max pooling 还是mean pooling,都没有需要学习的参数。因此,在卷积神经网络 的训练中,Pooling 层需要做的仅仅是将误差项 传递到上一层,而没有 梯度 的计算。Max Pooling 误差项的传递如下图,假设第层大小为 4*4,pooling filter大小为2*2,步长为 2,这样,max pooling 之后,第层大小为 2*2。假设第 层的 值都已经计算完毕,我们现在的任务是计算第层的 值。我们用表示第层的加权输入;用表示第 层的加权输入。我们先来考察一个具体的例子,然后再总结一般性的规律。对于maxpooling:也就是说,只有区块中最大的才会对的值产生影响。我们假设最大的值是,则上式相当于:名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 20 页 -那么,我们不难求得下面几个偏导数:因此:而:现在,我们发现了规律:对于max pooling,下一层的 误差项 的值会原封不动的传递到上一层对应区块中的最大值所对应的神经元,而其他神经元的 误差项 的值都是 0。如下图所示(假设、为所在区块中的最大输出值):Mean Pooling 误差项的传递我们还是用前面屡试不爽的套路,先研究一个特殊的情形,再扩展为一般规律。名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 20 页 -如上图,我们先来考虑计算。我们先来看看如何影响。根据上式,我们一眼就能看出来:所以,根据链式求导法则,我们不难算出:同样,我们可以算出、:现在,我们发现了规律:对于mean pooling,下一层的 误差项 的值会平均分配 到上一层对应区块中的所有神经元。如下图所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 20 页 -上面这个算法可以表达为高大上的克罗内克积(Kronecker product)的形式,有兴趣的读者可以研究一下。其中,是pooling 层filter的大小,、都是矩阵。至此,我们已经把 卷积层、Pooling 层 的训练算法介绍完毕,加上上一篇文章讲的全连接层 训练算法,您应该已经具备了编写卷积神经网络代码所需要的知识。为了加深对知识的理解,接下来,我们将展示如何实现一个简单的卷积神经网络。卷积神经网络的实现现在,我们亲自动手实现一个卷积神经网络,以便巩固我们所学的知识。首先,我们要改变一下代码的架构,层成为了我们最核心的组件。这是因为卷积神经网络有不同的层,而每种层的算法都在对应的类中实现。这次,我们用到了在 python中编写算法经常会用到的numpy包。为了使用 numpy,我们需要先将 numpy导入:i mp or tnumpyasnp卷积层的实现卷积层初始化我们用 ConvLayer 类来实现一个卷积层。下面的代码是初始化一个卷积层,可以在构造函数中设置卷积层的超参数。cl a ssConv La ye r(o bj ect):de f_ i ni t _(s el f,i nput _ wi dt h,i nput _hei ght,ch annel _n um ber,f i l t er _wi dt h,f i l t er _he i ght,f i l t er _number,ze r o_padd i ng,st r i de,act i vat or,l e ar ni ng_ r at e):sel f.i nput _ wi dt h=i nput _wi dt hsel f.i nput _ hei ght=i nput _ hei ghtsel f.channe l _numbe r=chan nel _num b ersel f.f i l t er _wi dt h=f i l t er _wi dt hsel f.f i l t er _hei ght=f i l t e r _hei ghtsel f.f i l t er _number=f i l t e r _num bersel f.zer o_p addi ng=zer o_p addi ngsel f.st r i de=st r i desel f.out put _wi dt h=Conv La ye r.c al cul at e _out put _si ze(sel f.i n put _wi d t h,f i l t er _wi dt h,zer o_padd i ng,st r i de)sel f.out put _hei ght=Conv La ye r.c al cul at e _out put _si ze(sel f.i n put _hei ght,f i l t er _hei g ht,zer o_pa ddi ng,st r i de)sel f.out put _ar r ay=np.zer os(sel f.f i l t er _number,sel f.ou t put _he i ght,se l f.out pu t _wi dt h)sel f.f i l t er s=f orii n r ange(f i l t er _n um ber):sel f.f i l t er s.a ppend(Fi l t er(f i l t e r _wi dt h,f i l t er _hei ght,sel f.channe l _number)sel f.act i va t or=a ct i vat orsel f.l ear ni ng_r at e=l ear n i ng_r at ecalculate_output_size函数用来确定卷积层输出的大小,其实现如下:st at i c m et hod名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 20 页 -de fca l cul at e_ out put _si ze(i nput _s i ze,f i l t er _ si ze,z er o_padd i ng,st r i de):r et ur n(i nput _si ze-f i l t er _ si ze+2*zer o_paddi ng)/st r i de+1Filter类保存了卷积层的 参数 以及梯度,并且实现了用 梯度下降算法来更新参数。cl a ssFi l t er(obj ect):de f_ i ni t _(s el f,wi dt h,hei ght,dept h):sel f.wei ght s=np.r andom.u ni f or m(-1e-4,1e-4,(dept h,hei ght,wi dt h)sel f.bi as=0sel f.wei ght s_gr ad=np.zer os(sel f.we i ght s.s hape)sel f.bi as_g r ad=0de f_ r epr _(s el f):r et ur n f i l t e rwei gh t s:n%snbi as:n%s%(r epr(se l f.wei g ht s),r e pr(sel f.bi as)de fge t _wei ght s(sel f):r et ur n sel f.wei ght sde fge t _bi as(s el f):r et ur n sel f.b i asde fup dat e(sel f,l ear ni ng _r at e):sel f.wei ght s-=l e ar ni ng_r at e*se l f.wei ght s_ gr adsel f.bi as-=l ear n i ng_r at e*sel f.bi as_gr ad我们对参数的初始化采用了常用的策略,即:权重 随机初始化为一个很小的值,而偏置项 初始化为 0。Activator类实现了 激活函数,其中,forward方法实现了前向计算,而backward 方法则是计算 导数。比如,relu 函数的实现如下:cl a ssRel u Ac t i vat or(o bj e ct):de ff o r war d(se l f,wei ght e d_i nput):#r e t ur n wei ght ed_i nputr et ur n m ax(0,wei ght ed_i nput)de fba ckwar d(s el f,out put):r et ur n 1 i fout put 0 el se 0卷积层前向计算的实现ConvLayer 类的forward方法实现了卷积层的前向计算(即计算根据输入来计算卷积层的输出),下面是代码实现:de ff o r war d(se l f,i nput _a r r ay):计算卷积层的输出输出结果保存在sel f.out put _ ar r ay sel f.i nput _ ar r ay=i nput _a r r aysel f.padded _i nput _ ar r ay=paddi ng(i nput _ar r ay,sel f.ze r o_padd i ng)f orfi n r ange(sel f.f i l t er _num b er):f i l t er=sel f.f i l t er s f conv(se l f.padd ed_i nput _ar r ay,f i l t er.get _wei ght s(),sel f.out put _ar r ay f ,sel f.st r i d e,f i l t e r.get _bi as()el e m ent _wi s e_op(se l f.out pu t _ar r ay,se l f.act i v at or.f or war d)上面的代码里面包含了几个工具函数。element_wise_op函数实现了对 numpy数组进行 按元素 操作,并将返回值写回到数组中,代码如下:#对numpy数组进行e l ementwi se操作defel emen t _wi se_o p(ar r ay,op):f o rii n np.ndi t er(ar r ay,op_ f l ags=r eadwr i t e ):i .=op(i)conv 函数实现了 2维和3维数组的 卷积,代码如下:defconv(i nput _ar r ay,ke r nel _ar r ay,ou t put _ar r ay,st r i de,bi as):计算卷积,自动适配输入为2D和3D的情况 channel _number=i nput _ar r ay.n di mout put _ wi dt h=out put _ ar r ay.sh ape 1out put _ hei ght=out put _ar r ay.s hape 0ker nel _ wi dt h=ker nel _ ar r ay.sh ape-1ker nel _ hei ght=ker nel _ar r ay.s hape-2f o rii n r an ge(out p ut _hei gh t):f orji n r ange(out put _wi dt h):out put _ ar r ay i j=(get _pat ch(i nput _ar r ay,i,j,ker nel _wi dt h,ker nel _hei ght,st r i de)*ker nel _a r r ay).s um()+bi aspadding 函数实现了 zero padding 操作:名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 20 页 -#为数组增加Zer o pa ddi ngdefpaddi n g(i nput _ ar r ay,zp):为数组增加Zer o paddi ng,自动适配输入为2D和3 D的情况 i fzp=0:r et ur n i nput _ ar r ayel se:i fi n put _ar r a y.n di m=3:i nput _wi dt h=i nput _ar r ay.shap e 2i nput _h ei ght=i nput _a r r ay.sha pe 1i nput _d ept h=i nput _ar r ay.shap e 0padded_ ar r ay=np.zer o s(i np ut _dept h,i np ut _hei g ht+2*zp,i np ut _wi dt h+2*zp)padded_ ar r ay:,zp:zp+i nput _he i ght,zp:zp+i nput _wi dt h=i nput _ar r ayr et u r n pa dded_ar r ayel i fi nput _ar r a y.n di m=2:i nput _wi dt h=i nput _ar r ay.shap e 1i nput _h ei ght=i nput _a r r ay.sha pe 0padded_ ar r ay=np.zer o s(i np ut _hei g ht+2*zp,i np ut _wi dt h+2*zp)padded_ ar r ay z p:zp+i nput _h ei ght,zp:zp+i nput _wi dt h=i nput _ar r ayr et u r n pa dded_ar r ay卷积层反向传播算法的实现现在,是介绍卷积层核心算法的时候了。我们知道反向传播算法需要完成几个任务:1.将误差项 传递到上一层。2.计算每个 参数 的梯度。3.更新参数。以下代码都是在 ConvLayer 类中实现。我们先来看看将误差项 传递到上一层的代码实现。de fbp _sensi t i vi t y_map(se l f,sens i t i vi t y_ ar r ay,act i vat or):计算传递到上一层的sensi t i v i t ym apsen si t i vi t y _ar r ay:本层的s ensi t i vi t y mapact i vat or:上一层的激活函数#处理卷积步长,对原始sens i t i vi t ym ap进行扩展exp anded_ar r ay=s el f.expa nd_sensi t i vi t y_map(sensi t i vi t y_ar r ay)#f ul l 卷积,对s ens i t i vi t i ym ap进行zer o paddi n g#虽然原始输入的ze r o

    注意事项

    本文(2022年2022年零基础入门深度学习-卷积神经网络 .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开