文章转自: http://blog.csdn.net/thesby/article/details/50880546
Caffe是现在非常流行的深度学习库,能够提供高效的深度学习训练。该库是用C++编写,能够使用CUDA调用GPU进行加速。但是caffe内置的工具不一定能够满足用户的所有需求,所以阅读源码并理解它,是很有必要的。 这篇博文不是想把Caffe的所有函数都讲一遍,因为Caffe的源码很大,一本书都不一定能够说清楚。这里我只是说说该怎么去阅读源码,给大家提供一个思路和建议,让大家能够快速把握caffe的整体,出了问题该往哪个方向去思考。 caffe的编译,网上已有很多教程,大家可以看看这篇。
examples里面由好几个caffe的示例,打开mnist看下,里面由很多文件,我们先看readme.md。里面很好的讲解了如何运行这个模型,以及各个参数代表什么意思。读懂了这个的话,基本上你就会运行示例了。其他的示例也可以照这样学习。值得一提的是,学习这个部分时,可以结合docs里面的讲解,还有一些 *.ipynb。如何查看ipynb就不说了,自己查资料。 示例运行得差不多,你就可以琢磨下如何使用deploy文件了。
为了更好的阅读代码,我建议按如下步骤使用Eclipse打开caffe工程:
配置下java,因为Eclipse需要java环境下载eclipse cpp版打开Eclipse,在菜单栏File->import->c/c++->Existing code as Autotools project,按next,然后在browse中找到caffe-master,进入caffe-master后按确认。这样就导入了整个工程了,但是不要尝试使用Eclipse来编译caffe,因为基本上都编译不通过。
blob、layer、net、solver这几个是要好好阅读的(头文件以及实现),可以结合这docs里面的文件看。看懂了这几个文件,那么你基本上就大概知道caffe是如何运行的了。
但是你可能在运行示例时很纳闷,每个层那么多的参数,我该怎么知道它是什么意思。别担心,所有的这些信息都可以在src/caffe/proto/caffe.proto中找到。看不懂的话,可以查一下protobuf的使用。
上面的如果都看懂了,那就可以好好研究下src/caffe/layers里面的文件了,把mnist用到的那些层好好看看它是怎么实现的,可以先看cpp,有cuda基础的就看看cu。
添加自己的caffe层需要有一定的c++基础,至少要明白什么是继承,什么是虚函数,以及多线程的基本概念。可以选择继承一个和自己功能最相近又满足继承关系的层。 具体的步骤可以参考下这篇博文。
使用pycaffe的话,我推荐使用cmake而不是直接的make编译工程,因为现在的版本中make后的pycaffe经常出现找不到链接库。 现在是看*.ipynb文件的时候了,里面详细讲解了如何使用caffe的Python接口。出现问题的话就看源代码。建议使用pycharm或者Eclipse Java版
