C++卷积神经网络实例:tiny_cnn代码具体解释(8)——partial_connected_layer层结构类分析(上)
在之前的博文中我们已经将顶层的网络结构都介绍完毕,包括卷积层、下採样层、全连接层,在这篇博文中主要有两个任务。一是总体贯通一下卷积神经网络在对图像进行卷积处理的整个流程,二是继续我们的类分析。这次须要进行分析的是卷积层和下採样层的公共基类:partial_connected_layer。
一、卷积神经网络的工作流程
首先给出经典的5层模式的卷积神经网络LeNet-5结构模型:
这是一个典型的卷积层-下採样层-卷积层-下採样层-卷积层-全连接层模式的CNN结构。接下里观察在我们的程序实例中对网络的初始化情况:
(1)卷积层C1:输入图像的尺寸为32*32,卷积核尺寸(卷积窗体尺寸)为5*5。输入数据模板数量为1,卷积核模板种类为6个。导致C1层对每一个输入的图像进行卷积操作之后,得到6个卷积特征模板输出,而且卷积后图像的尺寸变为32-5+1=28
(2)均值下採样层S2:输入图像的尺寸为28*28,输入数据矩阵的个数为6个。均值下採样是的邻域窗体为2*2,。这里须要强调的一点是S2和C1是相邻层。S2以C1层的输出为输入。因此S2的输入尺寸等于C1的输出尺寸,S2的输入特征模板个数等于C1的输出特征模板个数。而且这两层之间的连接方式为全连接。S2层由于对输入数据矩阵进行了2*2的均值下採样。因此导致数据尺寸会缩小为原来的四分之中的一个,即14*14。
(3)卷积层C3:输入图像尺寸为14*14,卷积核尺寸为5*5,输入数据模板数量为6个。该层卷积模板种类为16个,导致C3层对每一个输入的图像进行卷积操作之后。得到16个卷积特征模板输出,而且卷积后图像的尺寸变为14-5+1=10。
而且C3层与S2层之间的连接属性并不是是默认的全连接。而是依照指定连接方式(存储在connection变量中)进行连接。
(4)均值下採样层S4:输入数据矩阵的尺寸为10*10,输入数据矩阵的个数为16个,均值下採样的邻域窗体为2*2,与S2类似,这里的下採样操作相同导致矩阵尺寸减半,因此S4层的特征矩阵输入尺寸为5*5。
(5)卷积层C5:输入数据矩阵尺寸为5*5,卷积核尺寸为5*5,输入数据模板数量为16。卷积核模板种类为120个。由于在这一层数据矩阵的尺寸已经和卷积核尺寸相同。导致每一次的卷积操作都将得到一个详细数值(即卷积窗体无法进行滑动),导致C5层输出的特征结构是一个120维的特征向量。
(6)全连接层:输入特征维数为120,输出特征维数为10(一共同拥有十类),完毕特征的分类工作。类此与一个抽象的线性分类函数。
(6)激活函数:从代码中能够看出。这里各个层之间的激活函数统一选用tan_h函数,当然tiny_cnn中还封装了非常多其它类型的激活函数,在这里能够随便选择。但须要注意的一点是这个网络中理论上仅仅能使用一种类型的激活函数。
二、partial_connected_layer类结构
在分析partial_connected_layer类的过程中,相同遵循“成员变量-构造函数-功能函数”的分析流程
2.1 成员变量
partial_connected_layer类主要有下面五个成员变量:
这五个成员变量的结构及功能是分析tiny_cnn网络映射机制的一个重点,因此在这里对其着重进行一下分析。
首先须要注明一点的是,前三个变量本质上是一个双层vector结构的成员变量,之所以称其为双层vector,是由于在io_connection等别名相应的宏定义中。已经包括了一层vector属性:
因此weight2io_、out2wi_、in2wo_、bias2out_均是双层的vector结构,前三个变量的核心存储单元是pair(,)。第四个变量的核心存储单元则是一个无符号整型变量。为了更好的说明这样的双层vector的特殊结构,这里给出一个示意图:
这里之所以採用了双层的vector结构,主要原因在于partial_connected_layer类是一个基类型,须要卷积层和下採样层提供基本层结构框架,而在实际的网络模型中都包括多个相同结构的卷积层和下採样层,在对详细某一层的某一个映射核进行索引时,就须要用到这样的双层的vector结构。最外层的vector(vector m)用来标记当前层的详细标号。即指明当前层是详细哪一层;内层的vector()(vector m1~vector mn)用来索引当前层中详细哪一个卷积核,由于一个卷积核包括多个权重值(比如C1层共同拥有6个卷积核,每一个卷积核包括5*5=25个权重值,因此C1层在存储卷积核权重时须要用到6个vecto类型容器,每一个容器中包括25个值)。
总之中的一个个卷积核中包括多个权重值,一个卷积层中包括多个卷积核,这就要求使用一种双层vector的数据结构对它进行存储。其索引机制一定程度上有些类似于二维数组的索引机制。
OK,这篇博客就先介绍到这里,在下一篇博文中我们将着重介绍partial_connected_layer类中的相关构造函数以及一些重要的功能函数。
C++卷积神经网络实例:tiny_cnn代码具体解释(8)——partial_connected_layer层结构类分析(上)的更多相关文章
- C++卷积神经网络实例:tiny_cnn代码具体解释(7)——fully_connected_layer层结构类分析
之前的博文中已经将卷积层.下採样层进行了分析.在这篇博文中我们对最后一个顶层层结构fully_connected_layer类(全连接层)进行分析: 一.卷积神经网路中的全连接层 在卷积神经网络中全连 ...
- C++卷积神经网络实例:tiny_cnn代码具体解释(6)——average_pooling_layer层结构类分析
在之前的博文中我们着重分析了convolutional_layer类的代码结构.在这篇博文中分析相应的下採样层average_pooling_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 ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...
随机推荐
- Android Design Support控件之DrawerLayout简单使用
DrawerLayout能够让我们在项目中非常方便地实现側滑菜单效果.如今主流的应用如QQ等都 採用的这样的效果. 这两天也是在学习Android Design Support的相关知识.网上有关这方 ...
- TCP/IP协议族-----20、远程登录:TELNET与SSH
- 空间矢量数据(.shp文件)之JAVA操作
Shape文件由ESRI开发.一个ESRI(Environmental Systems Research Institute)的shape文件包含一个主文件,一个索引文件,和一个dBASE表. 当中主 ...
- android开发使用SQLite之写日记
使用数据库实现对数据的存储. 以下上一个小样例,写日记. 效果例如以下: 当LIstView中没有数据显示时,我们须要告诉用户没有数据. 方法有二: 1. activity继承Li ...
- amaze ui和bootstrap有哪些差别?
amaze ui和bootstrap有哪些差别? 问题 我最近在学amaze ui,感觉如果单从功能性来看和bootstrap最大差别也就是扁平化,不过妹子ui号称对国产本土化支持更好,这个具体表现在 ...
- 39.Node.js域名解析---DNS模块
转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var ...
- windows下go语言环境
1 liteIDE ,随便装哪儿都行 2 GO语言包 安装 ,我安装到了 c:\go (顺便给个地址下载地址 https://golang.org/dl/ ) 3 GCC编译器 安装,同 ...
- bash命令集---文件的操作
git bash命令集: clear:清除窗口中的内容 ls touch cat more head tail mv cp rm diff chmod gzip gunzip gzcat lpr lp ...
- 【Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Special Numbers
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会发现. 进行一次操作过后. 得到的数字肯定是<=1000的 然后1000以下可以暴力做的. 则我们枚举第1步后得到的数字x是 ...
- 在web开发中你不得不注意的安全验证问题#2-XSS
前言 XSS又叫CSS (Cross Site Script) ,跨站脚本攻击. 恶意攻击者往Web页面里插入恶意html代码.当用户浏览该页之时,嵌入当中Web里面的html代码会被运行,从而达到恶 ...