初试cnn(1)

本文介绍了如何使用Tiny_CNN库在C++中实现卷积神经网络,包括卷积层、均值下采样层等核心组件的结构和功能。通过分析Tiny_CNN的代码,详细阐述了卷积层的构造函数、连接方式以及成员变量的初始化过程,展示了Tiny_CNN的卷积网络结构和激活函数的选择。
摘要由CSDN通过智能技术生成

         前几天,老板安排任务了,要求找个卷积网络的c++代码自己跑一下试试,虽然有点蒙蔽可是还要去做,搜了很多代码,基本上都是从hithub.com里下载的代码,里面基本都是开源的代码,而且是经过测试没有问题的,补充一句,在这个网站串代码的人每个人都很厉害,程序近乎是完美的,大家在搞懂其中原理之后建议去学习一下人家的写作思路是怎样的。首先,建议大家跑一下tiny_cnn,这个比较简单。可以直接打开VC里面的vc12的vc++ pro,里面都是包装好的,先运行一下试试,炮成功之后再看代码。

(1)程序来源:         代码包下载地址:https://github.com/tiny-dnn/tiny-dnn,下载完之后解压即可。解压完之后包括数据和代码两个部分。data文件夹中存放了测试程序用的Mnist数据库。这里作者已经将数据库划分为测试样本集合训练样本集,并制作好了对应的标签矩阵,在调试程序的过程中只需要直接调用数据库即可,非常方便。以下是需要在debug链表中需要加入的opencv的库,还有其他的路径这里不做详细解释,可以见:http://blog.csdn.net/vicdd/article/details/52787787


(2)tiny_cnn的基本网络结构:

         1、Layer_base和Layer:这两个没什么说的,作为基类,封装的都是各个层所公有的操作,其内部的功能函数大都是虚函数和纯虚函数,依赖子类的多态性实例化。

  2、Input_layer:输入层,基本的层构造操作,以及前向传播的的入口和反向传播的终点,在这一层完成数据(图像矩阵)的输入以及前向传播的开始,同时准备接受反向传播的结果。

  3、convolutional_layer:卷积层,这是卷积神经网络的主力层,保存对应的卷积核和偏置核,方便在前向传播和反向传播过程中调用计算,同时提供了图像可视化结构,能够将保存的权重矩阵转换为图像形式进行可视化输出。

  4、average_pooling_layer:均值下采样层,这一层主要有两个作用,对卷积层的输出结果进行下采用并可视化输出。

  5、fully_connected_layer:全连接层,作为网络末尾的输出层,最终的输出结果就是网络的最终判决结果,即一个标签向量,这里面主要实现了前向传播算法和反向传播算法的全连接版(和卷积层略有不同)。

(3)分析程序里的卷积层-下采样层-卷积层-下采样层-卷积层-全连接层模式的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&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值