在之前的博文中我们已经将顶层的网络结构都介绍完毕,包括卷积层、下採样层、全连接层,在这篇博文中主要有两个任务。一是总体贯通一下卷积神经网络在对图像进行卷积处理的整个流程,二是继续我们的类分析。这次须要进行分析的是卷积层和下採样层的公共基类: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层结构类分析(上)的更多相关文章

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

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

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

    在之前的博文中我们着重分析了convolutional_layer类的代码结构.在这篇博文中分析相应的下採样层average_pooling_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. easyui datagird 总计栏

    在使用easyui 的表格的时.非常多时候须要加一个总计栏,当然easyui中有加总计栏的方法,写一个footer就好,然而我认为这样的方法并不好.由于加入的总计栏是和列表每一个单元格相应的,有长度限 ...

  2. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  3. 绕过open_basedir读文件脚本

    绕过open_basedir读文件脚本 2016年11月13日 01:28:21 阅读数:1221 参加了一场2016年的sycsec感觉又学到不少东西 废话不多说,首先啥是open_basedir? ...

  4. SpringBoot与Dubbo整合-项目搭建

    本章节建立生产者和消费者来演示dubbo的demo 生产者:springboot-dubbo-provider 和 消费者:springboot-dubbo-consumer 工程配置详解 Apach ...

  5. 小项目: low版本的 员工信息程序:

    ### 附加两个文件1 user_info 和worker_info flag = False def logon(): #登录函数 global flag usr = input('Username ...

  6. 玲珑学院 1014 Absolute Defeat

    SAMPLE INPUT 3 2 2 2 1 1 5 1 4 1 2 3 4 5 4 10 3 1 2 3 4 SAMPLE OUTPUT 1 0 15 前缀和,每个元素都判断一下. #include ...

  7. AIX 适配器

    1. 查看所有适配卡 lsdev -CHc adapter     2. 物理网卡适配卡 查看到物理网卡的个数与类型 lsdev -Cc adapter|grep ent   查看物理网卡具体插槽位( ...

  8. JAVA使用YUI压缩CSS/JS

    前言 JS/CSS文件压缩我们经常会用到,可以在网上找在线压缩或者本地直接使用,我这里使用的是yahoo开源组件YUI Compressor.首先介绍一下YUI Compressor,它是一个用来压缩 ...

  9. buffer--cache 详解

  10. gdal读写图像分块处理

    转自赵文原文 gdal读写图像分块处理(精华版) Review: 用gdal,感觉还不如直接用C++底层函数对遥感数据进行处理.因为gdal进行太多封装,如果你仅仅只是Geotif等格式进行处理,IO ...