深度学习框架Caffe简介(1)

来源于油管上的讲解视频
整体概况
由伯克利大学开发,代码是用C++编写的,但是提供了python和matlab的接口,可以用这两个编程语言实现;在训练和微调前馈模型时效果很好。
主要组成部分
bolb:将data和label封装在blob里面;
layer:对应网上的层,比如hidden layer\inputlayer等;
Net:整个网络构成;
Solver:进行梯度更新的。
训练过程
不用写一个代码就可以训练网络!!
但是,需要做的事情是:
1、转换数据(对输入数据做一系列预处理,转换成我们需要的格式,Caffe支持多种数据格式,比如:lmdb;
2、定义网络(编写一个prototxt文件,配置所需要的文件);
3、配置一些训练的参数,比如学习率、输出数据如何保存、GPU如何训练等;
4、直接训练就行。
第一步
比如,我们要做一个分类任务,那么我们需要把数据转换成一个LMDB(类似于一个数据库,训练时速度快)格式,因为一般来说,训练网络是在GPU上进行的,运行速度很快,但是数据传输到内存上进行预处理等操作是在CPU上进行的,可能出现的结果是后面网络的前向传播和后向传播已经进行完了,由于CPU处理速度太慢,无法再进行下一步迭代,所以把数据转换成LMDB格式是有必要的。
格式大致为:前面是路径名,后面是lable值,可能是0、1(只能用数字来表示car等实际意义的词);
还有另外一种格式:HDF5
一方面可以做多分类任务,不仅仅是0、1、2、3了,可以是回归任务中的一些坐标值等。
当然Caffe还有其他支持的格式。
定义网络
把网络中的所有层都写好,所有层的处理化参数,比如数据源的位置、batchsize等,按照网络设计的步骤,一步步添加就好。
定义超参数
指定迭代的次数、学习率、权重衰减参数等。
开始训练
train就是一个.sh文件,调用安装好的Caffe接口,其中需要指定一些参数,比如:用哪个显卡GPU进行训练、model和solver的位置,如果transfer learning,网络的参数是从别的地方提取了一部分的,还需要指定weights参数。
Caffe社区 Caffe在GitHub上有一个社区叫作:Model Zoo,这里面包含了别人已经训练好的模型:AlexNet\VGG等,我们也可以从社区中找到很多任务,比如:目标追踪、人脸识别等。我们可以transfer learning,把已经训练好的模型下载下来。