在之前的博文中我们着重分析了convolutional_layer类的代码结构。在这篇博文中分析相应的下採样层average_pooling_layer类:

  一、下採样层的作用

  下採样层的作用理论上来说由两个,主要是降维,其次是提高一点特征的鲁棒性。在LeNet-5模型中。每一个卷积层后面都跟着一个下採样层:

  原因就是当图像在经过卷积层之后。因为每一个卷积层都有多个卷积模板,直接导致卷积结果输出的特征矩阵相对于输入的数据矩阵其维数要提高数倍。再加上存在若干卷积层(谷歌的某些模型甚至超过100层),若不进行降维操作。最后的特征维数可想而知,因此在这里下採样层就充当了一个特征降维的角色。比方这里用的是2*2模板均值下採样,说白了就是四个相邻像素经过加权计算变成一个,维数变为原来的四分之中的一个,降维性能显而易见。

至于鲁棒性问题,理论上仅仅要是合理的降维手段。对鲁棒性都会有一定的提升(当然这是我的个人观点)。

  二、average_pooling_layer类结构

  average_pooling_layer类相同继承自基类partial_connected_layer,和前文中所说的convolutional_layer类算是相同继承层次,因此与convolutional_layer类在结构上也很类似,但下採样层因为其功能相对单一,因此在结构上比convolutional_layer类要简洁不少

  2.1 成员变量

  average_pooling_layer类的成员变量一共同拥有两个,分别保存输入数据矩阵的属性和下採样后输出特征矩阵的属性:

  至于有关layer_size_t、index3d等类型的相关知识在上一篇博客中已经进行了具体介绍,这里不再赘述。

  2.2 构造函数

  average_pooling_layer类的构造函数十分简洁,基本上就是调用了基类partial_connected_layer的构造函数,然后在完毕自己类中两个成员变量的初始化而已:

  这里稍稍介绍一下pooling_size_mismatch()函数。这是一个定义在基类layer中的函数,作用就是抛出尺寸异常的信息,而在每一层中对尺寸匹配的检验标准都不同。因此各个子类在调用这个函数给出异常信息时,须要根据相应层的标准来进行推断,比方在下採样层,我们觉得假设输入数据矩阵的尺寸不是下採样窗体的整数倍时,则无法正常进行分块降维,即视为尺寸不匹配。抛出尺寸异常信息:

  2.3 其它函数

  除了构造函数,下採样层还提供了一些其它函数,包含下採样矩阵权重初始化函数和偏置初始化函数(在下採样的过程中相同须要加上偏置)init_connection(),权重矩阵设置函数connect_kernel(),以及输出特征矩阵图像化的转换函数output_to_image()。以上这些函数与前一篇博文中convolutional_layer类中的相应的函数功能能够说是全然相同(毕竟都是继承与同一个基类)。这里不再赘述。

  三、注意事项

  1、下採样层后的激活函数

  在实际的卷积神经网络模型中,对卷积特征输出进行下採样之后,紧接着应该送入激活函数中,换句话说下採样层和激活函数应该是紧密相关的。只是在这里作者并没有将激活函数直接放在average_pooling_layer类中,而是将每一个激活函数都封装成相应的类,并放到activation命名空间下:

  2、LeNet-5模型的经典性

  这里在介绍卷积伸神经网络模型时一直沿用LeNet-5模型,主要是因为它既结构简单又堪称CNN的经典之作,但在实际应用中卷积神经网络的层数可不止这些。举个样例,2014年的VGG模型已经将网络扩展到16层的深度,至于各大深度学习研究院内部已经将网络加深到多少层这个已经不得而知。总之中的一个两块泰坦级别的N卡是不够用的。

C++卷积神经网络实例:tiny_cnn代码具体解释(6)——average_pooling_layer层结构类分析的更多相关文章

  1. C++卷积神经网络实例:tiny_cnn代码具体解释(8)——partial_connected_layer层结构类分析(上)

    在之前的博文中我们已经将顶层的网络结构都介绍完毕,包括卷积层.下採样层.全连接层,在这篇博文中主要有两个任务.一是总体贯通一下卷积神经网络在对图像进行卷积处理的整个流程,二是继续我们的类分析.这次须要 ...

  2. C++卷积神经网络实例:tiny_cnn代码具体解释(7)——fully_connected_layer层结构类分析

    之前的博文中已经将卷积层.下採样层进行了分析.在这篇博文中我们对最后一个顶层层结构fully_connected_layer类(全连接层)进行分析: 一.卷积神经网路中的全连接层 在卷积神经网络中全连 ...

  3. DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究

    一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...

  4. C++卷积神经网络实例(一)

    跟着这位博主来学习C++的卷积网络实例,因为作者一直在更新代码,所以新的代码和这位博主的分析有所不同:这位博主写的东西太泛了,没有讲到实质, 可以参考下他分析的类与类之间的关系图.. 前四节:http ...

  5. 经典的卷积神经网络及其Pytorch代码实现

    1.LeNet LeNet是指LeNet-5,它是第一个成功应用于数字识别的卷积神经网络.在MNIST数据集上,可以达到99.2%的准确率.LeNet-5模型总共有7层,包括两个卷积层,两个池化层,两 ...

  6. 卷积神经网络CNN的原理(三)---代码解析

    卷积神经网络在几个主流的神经网络开源架构上面都有实现,我这里不是想实现一个自己的架构,主要是通过分析一个最简单的卷积神经网络实现代码,来达到进一步的加深理解卷积神经网络的目的. 笔者在github上找 ...

  7. 深入学习卷积神经网络(CNN)的原理知识

    网上关于卷积神经网络的相关知识以及数不胜数,所以本文在学习了前人的博客和知乎,在别人博客的基础上整理的知识点,便于自己理解,以后复习也可以常看看,但是如果侵犯到哪位大神的权利,请联系小编,谢谢.好了下 ...

  8. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  9. 卷积神经网络CNN与深度学习常用框架的介绍与使用

    一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...

随机推荐

  1. Markdown的安装和语法

    步骤: 1.打开webstorm,File-->Setting-->输入plugin-->Install JetBrains plugin-->输入markdown--> ...

  2. 通俗理解 模糊自适应PID

    模糊自适应PID算法就是在经典的PID的基础上添加模糊控制规则库,建立这个库的目的就是算法能够自己来进行改变P.I.D的值. 就拿温度的上升过程控制来说,刚开始的时候,希望温度能够快速的升到终点温度, ...

  3. UITextView与UITextfield的区别

    IOS中的UITextView和UITextField都是文本输入控件并都能够调用系统键盘.本次特酷把介绍UITextView和UITextField的区别.简单来说,UITextView和UITex ...

  4. 去BAT,你应该要看一看的面试经验总结

    我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的. 先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理.我本人 ...

  5. CSS---基础外部样式表

    <link rel="stylesheet" type="text/css" href="style.css" media=" ...

  6. Python旅途——数据类型

    1.概要 ​ 今天跟大家分享的是数据类型,数据类型在Python中的重要程度就好比我们汉语中的拼音一样重要. 2.数据类型 1.整形 整形就像是数学中的1.2.3一样,用int来表示. a = 1 # ...

  7. 基于flask的网页聊天室(三)

    基于flask的网页聊天室(三) 前言 继续上一次的内容,今天完成了csrf防御的添加,用户头像的存储以及用户的登录状态 具体内容 首先是添加csrf的防御,为整个app添加防御: from flas ...

  8. jquery validate基本

    http://www.runoob.com/jquery/jquery-plugin-validate.html jquery validate 默认 在键盘按下并释放及提交后验证提交表单 例如: $ ...

  9. LeetCode(26) Remove Duplicates from Sorted Array

    题目 Given a sorted array, remove the duplicates in place such that each element appear only once and ...

  10. SpringMVC最核心

    如图所示: