转载地址:http://blog.csdn.net/dengbingfeng/article/details/51469051
版权声明:本文为博主原创文章,未经博主允许不得转载。
本文主要是介绍我在阅读caffe过程中参考的顺序以及网站。
首先阅读caffe看了知乎上面的这篇文章 深度学习caffe的代码怎么读?参考的是Gein Chen大神的回答:
1.先让程序跑起来,看看结果,这样就会有直观的感受。
2.单步调试,跟着Caffe在网络里流动。
3.个性化定制Caffe。
4.理解并实现Backpropagation。
本文主要是进行了简单的单步调试,并跟着网络的结构看了网络的init() forward()以及backward()的过程。现在将我看的大概过程给大家分享。
一.caffe单步调试
1.config文件中将debug设置为1。2.重新编译caffe。3.使用gdb —arg 例如: gdb --args ./build/tools/caffe.bin train --solver=examples/mnist/lenet_solver.prototxt4.在caffe.cpp(caffe的入口函数)中设置断点5.gdb - r 让程序run起来注:gdb不熟悉可以需先补充相关知识二.Caffe入口函数
1.caffe 入口函数参考:caffe.cpp 程序入口分析这篇文章从caffe的main函数出发,介绍了caffe一步一步如何向下执行,同时这篇文章还科普了typedef、#define 宏定义等等基础知识,非常适合初学者阅读。2.caffe 训练网络参考: (Caffe,LeNet)训练网络入口这篇文章讲了如何将solver参数读入进去,solver如何创建、Solver::Solve()函数以及如何调用到sgdSolver()上以及Solver::Step()函数等等,非常适合看完上篇main函数之后,在接着看caffe.cpp中的train函数。三.初始化训练网络
初始化训练网络的文章参考文章:初始化训练网络这篇文章讲了如何将net的参数读入到网络,网络的整体结构、网络的数据层、卷积层、pooling层、全连接层 softmax等等的初始化,以及每一个层blob的结构是什么样进行了介绍。关于测试网络的初始化也可以参考:测试网络的初始化四、前向传播
前向传播的文章可以参考文章:(Caffe,LeNet)前向计算这篇文章主要剖析Caffe中Net::Forward()函数,即前向计算过程。这里主要说一下卷积层的实现,其他层的实现相对较简单。卷几层的实现可以参考caffe作者贾杨清关于卷几层的说明:caffe卷几层是如何实现说明了为何使用im2col的方法来实现卷积,虽然比较占内存。这里im2col的方法需要花时间去理解。