没想到第一篇CSDN博文献给了深度学习,看来我从此走向了一条研发狗的漫漫不归路。幸运的是,好歹也有点文字可写,纵使酸腐不堪,如果有助于人,倒是一件快意的事。正所谓苦中寻乐泪作酒,请君入席来一壶?
正常点哈~
都说Caffe难配置,实际上再简单不过了。如果想要简单快速上手Caffe,完全没必要安装cuda和cuDNN。除了一些更新库外,直接编译就好了,只有中间一些Makefile需要修改,如果你不想反复求虐,这一点你一定得注意哟~
1.默认已安装opencv3.0.0以上版本。一定要是opencv3.0以上哦,没装好的请自觉安装完。
2.安装ATLAS:
sudo apt-get install libatlas-base-dev
安装完后就完全不需要去理会网上那些帖子里说的MKL,OPENBLAS之类的库了。
3.安装各种依赖项目:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
最后这个protobuf是啥呢,protobuf是google公司的一个开源项目,主要功能是把某种数据结构的信息以某种格式保存及传递,类似微软的XML,但是效率较高。目前提供C++、java和python的API。
protobuf简介:http://blog.163.com/jiang_tao_2010/blog/static/12112689020114305013458/
protobuf使用实例 :http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/
4.下载Caffe:
git clone git://github.com/BVLC/caffe.git
5. 安装Caffe:
(1)复制Makefile.config:
cd caffe
cp Makefile.config.example Makefile.config
(2)修改Makefile.config文件:
gedit Makefile.config
打开Makefile.config文件后:
1)在# CPU_ONLY := 1这一行去掉#,使得CPU_ONLY模式生效;
2)在# OPENCV_VERSION := 3这一行去掉#,使得有关opencv3.0的链接生效,否则会出现类似这样的问题:
.build_release/lib/libcaffe.so: undefined reference tocv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to
cv::imencode(cv::String const&,
issue链接: https://github.com/BVLC/caffe/issues/2348
3)
sudo make all -j4
-j4 是指使用几个线程来同时编译,可以加快速度,j后面的数字可以根据CPU core的个数来决定,如果CPU是4核的,则参数为-j4,也可以
不添加这个参数,直接使用“make all”,这样速度可能会慢一点儿。
4)编译
sudo make test
sudo make runtest
编译完后就可以开始测试Caffe的数据集,整个过程不到20分钟~
6.下载Mnist手写体数字dataset:
sudo sh data/mnist/get_mnist.sh
sudo sh examples/mnist/create_mnist.sh
等偷偷在LeCun老师那下载完后,会得到两个数据集:mnist-train-leveldb/, 和mnist-test-leveldb/.就可以开始训练啦~(这里包含了LDB格式的数据集./examples/mnist/create_mnist.sh)
LeNet:
caffe中用的模型结构是非常著名的手写体识别模型LeNet,唯一的区别是把其中的sigmoid激活函数换成了ReLU,整个结构中包含两个convolution layer、两个pooling layer和两个fully connected layer。结构定义在$caffe-master/examples/mnist/lenet_train_test.prototxt中。定义MNIST Network:
该结构定义在lenet_train_test.prototxt中,需要对google protobuf有一定了解并且看过Caffe中protobuf的定义,其定义在$caffe-master/src/caffe/proto/caffe.proto
7.训练Mnist数据集
sudo gedit examples/mnist/lenet_solver.prototxt
lenet_solver.prototxt 文件设定运行CPU 版本或者 GPU 版本,修改最后一行:solver_mode: CPU
开始训练:
sudo sh examples/mnist/train_lenet.sh
最终的model,会存为两个caffemodel,caffe/examples/mnist/lenet_iter_5000.caffemodel 和caffe/examples/mnist/lenet_iter_10000.caffemodel
接下来的呢,就是可以载入这两个caffemodel来做手写数字识别啦,后期再写啦~