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 ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...
随机推荐
- 找回Settings Sync的gist id和token
方法一:如果你本地有缓存参考:https://www.cnblogs.com/zhang1028/p/9514471.html 方法二:如果你电脑重装系统了 1.找回gist id 登陆你的githu ...
- UVa-1339-古老的密码
这题的话,我们可以把字符串序列里面的字母直接计数,然后比较两个数组里面的数字是否一一相同,然后就可以直接判定YES or NO. 因为它题目中说的就是一种映射的关系,首先我们读入之后,把两个字符串的不 ...
- 关于C/C++的一些思考(5)
运算符重载函数的限制: 五个不能实现重载的符号:".", ".*", "::", "?", "sizeof&q ...
- 导出csv文件(php实现)
<?php namespace App\Library\lib; class CsvLib { /** * [构造函数] * */ public function __construct() { ...
- tomcat域名配置
修改tomcat目录下的web配置文件 vim conf/server.xml 在host标签内添加 <Context path="bbs" docBase="/a ...
- CSS3---渲染属性
1.计数器 CSS3计数器( CSS Counters )可以允许我们使用css对页面中的任意元素进行计数,实现类似于有序列表的功能.与有序列表相比,它的突出特性在于可以对任意元素计数,同时实现个性化 ...
- 【UVA 10820】Send a Table(欧拉函数)
Description When participating in programming contests, you sometimes face the following problem: Yo ...
- POJ 2728 Desert King(最优比率生成树, 01分数规划)
题意: 给定n个村子的坐标(x,y)和高度z, 求出修n-1条路连通所有村子, 并且让 修路花费/修路长度 最少的值 两个村子修一条路, 修路花费 = abs(高度差), 修路长度 = 欧氏距离 分析 ...
- .NET中的缓存实现
软件开发中最常用的模式之一是缓存,这是一个简单但非常有效的概念,想法是重用操作结果,执行繁重的操作时,我们会将结果保存在缓存容器中,下次我们需要该结果时,我们将从缓存容器中取出它,而不是再次执行繁重的 ...
- 04004_使用JavaScript完成注册表单数据校验
1.需求分析 (1)用户在进行注册的时候会输入一些内容,但是有些用户会输入一些不合法的内容,这样会导致服务器的压力过大,此时我们需要对用户输入的内容进行一个校验(前端校验和后台校验): (2)前端校验 ...