C++卷积神经网络实例:tiny_cnn代码具体解释(6)——average_pooling_layer层结构类分析
在之前的博文中我们着重分析了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层结构类分析的更多相关文章
- C++卷积神经网络实例:tiny_cnn代码具体解释(8)——partial_connected_layer层结构类分析(上)
在之前的博文中我们已经将顶层的网络结构都介绍完毕,包括卷积层.下採样层.全连接层,在这篇博文中主要有两个任务.一是总体贯通一下卷积神经网络在对图像进行卷积处理的整个流程,二是继续我们的类分析.这次须要 ...
- C++卷积神经网络实例:tiny_cnn代码具体解释(7)——fully_connected_layer层结构类分析
之前的博文中已经将卷积层.下採样层进行了分析.在这篇博文中我们对最后一个顶层层结构fully_connected_layer类(全连接层)进行分析: 一.卷积神经网路中的全连接层 在卷积神经网络中全连 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究
一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...
- C++卷积神经网络实例(一)
跟着这位博主来学习C++的卷积网络实例,因为作者一直在更新代码,所以新的代码和这位博主的分析有所不同:这位博主写的东西太泛了,没有讲到实质, 可以参考下他分析的类与类之间的关系图.. 前四节:http ...
- 经典的卷积神经网络及其Pytorch代码实现
1.LeNet LeNet是指LeNet-5,它是第一个成功应用于数字识别的卷积神经网络.在MNIST数据集上,可以达到99.2%的准确率.LeNet-5模型总共有7层,包括两个卷积层,两个池化层,两 ...
- 卷积神经网络CNN的原理(三)---代码解析
卷积神经网络在几个主流的神经网络开源架构上面都有实现,我这里不是想实现一个自己的架构,主要是通过分析一个最简单的卷积神经网络实现代码,来达到进一步的加深理解卷积神经网络的目的. 笔者在github上找 ...
- 深入学习卷积神经网络(CNN)的原理知识
网上关于卷积神经网络的相关知识以及数不胜数,所以本文在学习了前人的博客和知乎,在别人博客的基础上整理的知识点,便于自己理解,以后复习也可以常看看,但是如果侵犯到哪位大神的权利,请联系小编,谢谢.好了下 ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- 卷积神经网络CNN与深度学习常用框架的介绍与使用
一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...
随机推荐
- 按名字寻找文件和文件夹 find命令
find <指定目录> <指定条件> <指定动作> find /home/bnrc/py-faster-rcnn/caffe-fast-rcnn/ -name 'd ...
- CPP-基础:关于私有成员的访问
a.C++的类的成员函数中,允许直接访问该类的对象的私有成员变量. b.在类的成员函数中可以访问同类型实例的私有变量. c.拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员. d.类的成 ...
- 微信公众号:theTree20181123
哈哈哈哈~我开通了一个微信公众号,以后的文章会发在公众号内啦~走过路过的小伙伴们过来围观一下呀~~ 主要是分为三个模块:视觉SLAM,ACM,变美树洞 这里面写下来的文章都是我再读研阶段的所学所想当然 ...
- 单片微机原理P1:80C51指令系统和编程方法
0. 寻址方式 寻址方式在汇编中是很重要的,汇编所有的操作都是和和内存或者寄存器打交道的,在80C51里面一共7种寻址方式. 1. 立即寻址: 这个没什么好说的,就是往寄存器或者内存里面写立即数, ...
- Tunnelier使用说明
Tunnelier与MyEnTunnel类似,但是功能更加强大.MyEnTunnel小巧易用,如何使用MyEnTunnel可以参考 MyEnTunnel使用说明 这里列下Tunnelier的优点: 1 ...
- 25. TABLESPACES , 26. TABLE_CONSTRAINTS , 27. TABLE_PRIVILEGES
25. TABLESPACES TABLESPACES表提供有关活动MySQL Cluster表空间的信息. TABLESPACES表有以下列: TABLESPACE_NAME :表空间名称 ENGI ...
- 5. COLUMNS
5. COLUMNS 表COLUMNS提供表中列的信息. INFORMATION_SCHEMA Name SHOW Name Remarks TABLE_CATALOG TABLE_SCHEMA TA ...
- DB2数据库在线备份还原
DB2在线备份设置方法: 第一步:开启归档日志 db2 update db cfg for TEST_DB using logretain on 第二步:重启数据库 第三步:进行一次离线备份 db2 ...
- css 实践记录
子绝父相 https://developer.mozilla.org/zh-CN/docs/Web/CSS/position 利用子绝父相来实现一种比较老的居中方式:1.明确宽度:2.定位左边到容器的 ...
- CSS3---圆角设置
1.border-radius是向元素添加圆角边框.border-radius:10px; /* 所有角都使用半径为10px的圆角 */ border-radius: 5px 4px 3px ...