fine-tuning
一、需要的文件
- 训练数据、测试数据
- 预训练好的模型参数
- 参考模型的train_val.prototxt文件
- solver.prototxt文件
二、需要做的准备
- 生成训练集和测试集的lmdb数据文件
- 生成训练集和测试集的均值文件
**三、需要修改的地方 - solver.prototxt文件:
1 net:"train_val.prototxt"#此处要改为自己的路径
2 test_iter:7
#这个参数和train_val.prototxt文件中test数据的batchsize、testset相关,
#即:size(testset) >= test_iter * test数据的batchsize(进行微调时这个值要减小)
3 test_interval:30
#原则上讲每进行一次测试要完成一个epoch的训练,
#所以size(trainset) <= test_interval * train数据的batchsize
4 base_Lr:0.001#进行微调时这个值要减小
5 lr_policy:"step"
6 gamma:0.1
7 stepsize:10000#进行微调时这个值要减小
8 display:20
9 max_iter:45000#进行微调时这个值要减小
10 momentum:0.9
11 weight_decay:0.0005
12 snapshot:10000
13 snapshot_prefix:"caffe_alexnet_train"#这个要给为自己的路径
14 solver_mode:GPU
- train_val.prototxt文件
下面只贴需要修改的部分
数据层_训练集
1 name:"ALexNet"
2 layer {
3 name:"data"
4 type:"Data"
5 top:"data"
6 top:"Label"
7 include {
8 phase:TRAIN
9 }
10 transform_param {
11 mirror:true
12 crop_size:227
13 mean_file:"这里为自己的均值文件路径"
}
15 data_param {
16 source:"这里为自己的训练数据路径"
18 batch_size:50#这里要改为合适的值
19 backend:LMDB
20 }
21}
数据层_测试集
1 name:"ALexNet"
2 layer {
3 name:"data"
4 type:"Data"
5 top:"data"
6 top:"Label"
7 include {
8 phase:TEST
9 }
10 transform_param {
11 mirror:true
12 crop_size:227
13 mean_file:"这里为自己的均值文件路径"
}
15 data_param {
16 source:"这里为自己的训练数据路径"
18 batch_size:20#这里要改为合适的值
19 backend:LMDB
20 }
21}
最后全连接层
343 layer {
344 name:"fc8-ft"#为了避免将预训练的参数赋值给该层,需要将要训练的fc8改名
345 type:"InnerProduct"
346 bottom:"fc7"
347 top:"fc8-ft"#所有fc8都要改
348 param{
349 1r_mult:10#学习率提高10倍
350 decay_nult:1
351 }
352 param{
353 1r_mult:20#学习率提高10倍
354 decay_nult:0
355 }
356 inner_product_paran {
357 num_output:4#此处改为自己的输出类别数
358 weight_filler {
359 type:"gaussian"
360 std:0.01
362 bias_filler {
563 type:"constant"
364 value:0
365 }
366 }
567}
准确率层和损失层
368 layer {
369 name:"accuracy"
370 type:"Accuracy"
371 bottom:"fc8-ft"#所有的fc都要改
372 bottom:"Label"
373 top:"accuracy"
374 include {
575 phase:TEST
376 }
377}
378 layer {
379 name:"loss"
380 type:"SoftmaxwithLoss"
381 bottom:"fc8-ft"#所有的fc都要改
382 bottom:"LabeL"
383 top:"Loss"
384}
四、开始训练
caffe train -solver PATH/solver.prototxt -weights PATH/*.caffemodel
训练的过程和微调的过程一样,只是不需要导入预训练好的参数
网友评论