深度学习框架:tiny_dnn分析(2) ————分析sample代码
来源:互联网 发布:淘宝网打不开 编辑:程序博客网 时间:2024/06/14 16:33
之前的博文已经成功编译了最新的tiny_dnn的编译,这里我们从代码入手开始分析一下整个sample代码的一些基本调用情况。
在分析代码之前我假设大家有基本CNN的了解。这里我们会涉及到的是一个最经典的CNN网络,LeNet-5,这个网络的名气那简直了,几乎搞这行都知道。它的成功运用时在手写字符的识别上的。我直接上图:
这是网络的结构,这里贴出方便我们下面对照代码。
我们可以查看到tiny_dnn的名字的工程里的main.cpp.这里找到函数sample_convnet,传入参数data_dir是train-labels.idx1-ubyte,train-images.idx3-ubyte,t10k-labels.idx1-ubyte,t10k-images.idx3-ubyte这4个文件的目录。这4个文件是一个公共的手写体数据集合,4个文件分别是用来做训练的图片,训练用的标签,测试的图片,测试的标签。
这里构造了一个network的对象,第一层convolutional_layer是图上的C1,一共是6个featruemap,32*32的输入,5*5的卷积核。第二层为图上的S2层,有6个featruemap,这层是pooling层,所以它的输入时28*28,输出时14*14,因为pooling层的原因和上层的featruemap数量也是一致的。下面一层C3的卷积层,大家注意到没有一点和其他卷积层不一样的地方,就是多了一个connection_table,这个是用来做为对上层也就是S2层进行部分的连接。这里也可以试试不用这个table大家测试一下对最后结果有没有影响,本人已经测试过了,没有多大影响,理论上来说也不该有多大影响。下面同样S4是pooling层。值得说的是这里C5之后,代码就直接接的全连接层了,简化了一下原有的LeNet-5。最后输出时10类。也就是0-9,10个数字。
下面就是训练的过程,这里train有几个参数,第一个optimizer参数有一个算法优化器,用来选择做训练时的优化方案,误差传播本身的优化器。第二,三个参数train_images,train_labels是训练的图片和标签,这里是通过train-labels.idx1-ubyte,train-images.idx3-ubyte文件读取的。minibatch_size这个参数就是最小的batch的大小了。on_enumerate_minibatch, on_enumerate_epoch,这两个参数都是和train的时候过程进度输出相关的,用的是类似回调的机制。第5个参数很重要,这是一个训练的循环数,这里我把它改成10了,之前sample是20,纯CPU跑的太慢。
最后是test过程,这里没什么可以说的,test_iamges,test_labels是t10k-labels.idx1-ubyte,t10k-images.idx3-ubyte,然后print出来结果,最后用ofstream然后通过network重载的<<保存为"LeNet-weights"文件,这个文件保存了整个网路结构和训练出来的参数结果。
- 深度学习框架:tiny_dnn分析(2) ————分析sample代码
- 深度学习框架:tiny_dnn分析(1)—————VS2015编译
- 深度学习笔记——情感分析
- peercast 代码分析(1)——框架分析
- vlc 代码分析(1)——框架分析
- 深度学习实践笔记2——分析BP
- 深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析
- 深度学习(五)yolov2代码分析
- 深度分析NandFlash—start.s中添加从Nand Flash启动的代码分析
- 29.Oracle深度学习笔记——分析函数
- 29.Oracle深度学习笔记——分析函数
- KopDB 框架学习2——源码分析
- DTcmsV4.0分析学习——(2)系统框架
- MFC学习笔记——应用程序框架分析(CWinApp)
- pjsip代码分析(1)——modules框架
- 深度学习框架性能对比分析
- [深度学习]Hinton DBN code 代码分析
- [深度学习]Hinton DBN code 代码分析
- TCP协议中的三次握手和四次挥手(图解)
- 句柄是什么?
- Linux下安装Composer
- 【后缀数组】BZOJ1031(JSOI2007)[字符加密Cipher]题解
- 编写.gitignore文件时踩的坑
- 深度学习框架:tiny_dnn分析(2) ————分析sample代码
- android中使用Twitter登陆获取用户信息
- Handler,Lopper,Message,MessageQueue关系
- 浅析C语言的非局部跳转:setjmp和longjmp
- android7.x Launcher3源码解析(1)---启动流程
- RxJava之二——Single和Subject
- QT模态对话框与非模态对话框
- 方格取数 多线程动态规划
- Unity StartCoroutine 协同程序