caffe 各种琐事小记

本文详细记录了使用Caffe训练MNIST数据集的过程,包括数据准备、配置路径、训练模型、计算均值文件以及测试模型。讨论了超参数设置,如学习率、动量和迭代次数,以及模型参数与数据量的关系,为防止过拟合和欠拟合提供了指导。

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),即可得到理想效果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值