深度学习框架:tiny_dnn分析(2) ————分析sample代码
2017-04-07 16:10
337 查看
之前的博文已经成功编译了最新的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有几个参数,第一个optimize
886a
r参数有一个算法优化器,用来选择做训练时的优化方案,误差传播本身的优化器。第二,三个参数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"文件,这个文件保存了整个网路结构和训练出来的参数结果。
在分析代码之前我假设大家有基本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有几个参数,第一个optimize
886a
r参数有一个算法优化器,用来选择做训练时的优化方案,误差传播本身的优化器。第二,三个参数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分析(1)—————VS2015编译
- StudyAI上MatConvNet框架学习笔记之3:mnist实例代码分析
- 深度学习开源库tiny-dnn的使用(MNIST)
- 主流开源深度学习框架对比分析
- 深度学习【15】darknet中im2col代码分析
- [深度学习]Hinton DBN code 代码分析
- Jmeter测试框架学习总结之代码分析
- MATLAB深度学习代码详细分析(一)__nnff.m
- 深度学习框架TensorFlow学习----100行代码实现AlexNet
- 【深度学习】【Caffe源代码解读4】笔记22 Caffe框架中I/O模块的代码初探
- 【神经网络与深度学习】Caffe使用step by step:caffe框架下的基本操作和分析
- 深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析
- Py之TF/Cuda/Cudnn:Win10下安装深度学习框架Tensorflow+Cuda+Cudnn最简单最快捷最详细攻略—Jason niu
- 深度学习框架TensorFlow学习总结-----第一个代码就是BUG
- [置顶] 深度学习框架搭建 Ubuntu16.04+CUDA+Anaconda4.2+Python3.5+keras+TensorFlow gpu+cuDNN
- 深度学习——利用学习框架TensorFlow搭建深层神经网络DNN
- 简易的深度学习框架Keras代码解析与应用
- 深度学习之tiny-dnn 开源库源码学习(1)
- 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取
- Coursera deeplearning.ai 深度学习笔记2-1-Practical aspects of deep learning-神经网络实际问题分析(初始化&正则化&训练效率)与代码实现