1、数据。mnist_test_lmdb和mnist_train_lmdb数据
2、路径。
(1)修改lenet_train_test.prototxt文件,训练和测试两处
source: "....省略/examples/mnist/mnist-train-leveldb" //写上你的绝对路径 backend: LEVELDB //格式改成LEVELDB (2)修改lenet_solver.prototxt文件:
net: "....省略/examples/mnist/lenet_train_test.prototxt" //绝对路径 snapshot_prefix: "....省略/examples/mnist/lenet" //绝对路径 solver_mode: CPU //CPU模式
3、右键caffe打开属性:
在Command Arguments输入: train --solver=前面的绝对路径/mnist/lenet_solver.prototxt
4、 确定后debug caffe,大功告成!
1、训练完后,会生成lenet_iter_5000.caffemodel,lenet_iter_5000.solverstate,lenet_iter_10000.caffemodel,lenet_iter_10000.solverstate四个文件
2、产生均值文件
计算均值文件:在E:\CaffeDev-GPU\caffe-master\Build\x64\Release目录下新建bat文件mnist_mean.bat,内容如下:
D:/caffewin/caffe-master/Build/x64/Debug/compute_image_mean.exe D:/caffewin/caffe-master/examples/mnist/mnist_train_lmdb mean.binaryproto --backend=lmdb
pause
双击运行
得到mean.binaryproto
3、新建mnist_test.bat
D:/caffewin/caffe-master/Build/x64/Debug/caffe.exe test --model=D:/caffewin/caffe-master/examples/mnist/lenet_train_test.prototxt --weights=D:/caffewin/caffe-master/examples/mnist/lenet_iter_10000.caffemodel pause
双击运行
4、测试图片
新建test.bat文件,写入

D:\caffewin\caffe-master\Build\x64\Debug\classification.exe D:\caffewin\caffe-master\examples\mnist\lenet.prototxt D:\caffewin\caffe-master\examples\mnist\lenet_iter_10000.caffemodel D:\caffewin\caffe-master\examples\mnist\mean.binaryproto D:\caffewin\caffe-master\examples\mnist\words.txt D:\caffewin\caffe-master\examples\mnist\2.bmp pause
超参数的调节https://blog.youkuaiyun.com/u014381600/article/details/54428599
设定学习率 α 和动量 μ 的经验法则:
base_lr: 0.01 # 开始学习速率为: α = 0.01=1e-2
lr_policy: "step" # 学习策略: 每 stepsize 次迭代之后,将 α 乘以 gamma
gamma: 0.1 # 学习速率变化因子
stepsize: 100000 # 每 100K 次迭代,降低学习速率
max_iter: 350000 # 训练的最大迭代次数 350K
momentum: 0.9 # 动量 momentum 为: μ = 0.9
-
有了上面的理论基础,我们现在可以设计自己的SGD slover文件参数了:
首先明白有几个参数是需要计算的而不是随便多少:
这里假设你的训练集样本有9000个,val集有1000个,
batch_size:训练集16,val:32
那么这里你的
test_iter=1000/32=32
test_interval=9000/16=263
一般还要设计另一个参数使得每次估计的梯度更准确:
iter_size:每次取iter_size个batch_size数据来估计当前的梯度
iter_size=8
接下来要设计的重要参数是max_iter,他决定了你的样本一共训练多少次,一般取test_interval的3倍到6倍。
max_iter=1000
然后SGD的其他参数就用上文caffe官网推荐 的参数:
base_lr: 0.01 # 开始学习速率为: α = 0.01=1e-2
lr_policy: "step" # 学习策略: 每 stepsize 次迭代之后,将 α 乘以 gamma gamma: 0.1
# 学习速率变化因子 stepsize: 100000 # 每 100K 次迭代,降低学习速率
momentum: 0.9 # 动量 momentum 为: μ = 0.9
但是这里的stepsize不能取这么大,一般让一个epoch用一个学习率,因此一般让stepsize=test_interval=9000/16=263
其他的参数就无关紧要了。
s.display = 20 # 屏幕日志显示间隔 s.snapshot = s.max_iter # 保存model间隔 #注意deploy的时候是不需要snapshot_prefix的 s.snapshot_prefix = save_model_prefix # 保存的model前缀 s.type = 'SGD' # 优化算法
模型参数大于数据量,相当于求解一个欠定方程,存在多解得可能性大,容易产生过拟合问题。
模型参数小于数据量,相当于求解一个超定方程,可能无解,也可能有解但准确率低,容易产生欠拟合问题。
我们可以把大模型在大的数据集下测验(imagenet),之后在对特定数据集进行精调(fine-turning),即可得到理想效果。
本文详细记录了使用Caffe训练MNIST数据集的过程,包括数据准备、配置路径、训练模型、计算均值文件以及测试模型。讨论了超参数设置,如学习率、动量和迭代次数,以及模型参数与数据量的关系,为防止过拟合和欠拟合提供了指导。
387

被折叠的 条评论
为什么被折叠?



