一、利用mnist训练集进行训练
(1) 将mnist数据集lmdb格式存储于examples\mnist目录下
(2) 计算出均值文件:mean.binaryproto
产生均值文件的方法是利用解决方案中的compute_image_mean.exe,位于目录\caffe-master\Build\x64\Release下。回到caffe-master根目录下创建一个mnist_mean.txt,写入如下内容:
Build\x64\Release\compute_image_mean.exe examples\mnist\mnist_train_lmdb mean.binaryproto
pause
接着为了使用均值文件需要稍微修改下层的定义。所以打开\examples\mnist\lenet_train_test.prototxt,做如下修改:
到此为止,均值文件的预处理部分处理完毕,下面就可以进行测试了。
(3) 在正式运行前还有几个文件中需要进行改动,首先用VS打开\examples\mnist目录下的lenet_solver.prototxt,将最后一行改成CPU:
可以看到,这个文件是对网络训练参数进行指定:max_iter指定了最大迭代次数,snapshot是输出中间结果。上图中的参数已经修改过,初始的max_iter和snapshot是10000和5000。
接着再用VS打开\examples\mnist目录下的lenet_train_test.prototxt,以正确指定训练集和测试集。
(实际默认的是lmdb格式,则不需要修改)这里额外介绍下caffe-windows采用的LeNet-5模型,也就是上图中layer的定义方式。由于之后自己写代码实现模型时肯定需要对LeNet-5模型有了解,所以提供该模型的原始资料以供参考。
http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
其实平时看些别人论文中提供的代码,上述两个文件也算是论文和代码的核心所在。
#网络模型描述文件
#也可以用train_net和test_net来对训练模型和测试模型分别设定
#train_net: "xxxxxxxxxx"
#test_net: "xxxxxxxxxx"
net: "E:/Caffe-windows/caffe-windows/examples/mnist/lenet_train_test.prototxt"
#这个参数要跟test_layer结合起来考虑,在test_layer中一个batch是100,而总共的测试图片是10000张
#所以这个参数就是10000/100=100
test_iter: 100
#每训练500次进行一次测试
test_interval: 500
#学习率
base_lr: 0.01
#动力
momentum: 0.9
#type:SGD #优化算法的选择。这一行可以省略,因为默认值就是SGD,Caffe中一共有6中优化算法可以选择
#Stochastic Gradient Descent (type: "SGD"), 在Caffe中SGD其实应该是Momentum
#AdaDelta (type: "AdaDelta"),
#Adaptive Gradient (type: "AdaGrad"),
#Adam (type: "Adam"),
#Nesterov’s Accelerated Gradient (type: "Nesterov")
#RMSprop (type: "RMSProp")
#权重衰减项,其实也就是正则化项。作用是防