fine-tuning

JLU-IPVR

听笙

首先解释一下什么叫fine-tuning,基于一个训练好的caffe模型使用自己的数据,利用训练好的模型的权重参数值,通过修改最后一层的参数和输出类别,训练出一个适合自己数据的模型。

在实际学习的和做工程的过程中我们会遇到一个问题,就是数据量的问题,我们很难采集到大量的数据,因为我们都知道做深度学习需要使用到大量的数据,但是在我们之前已经有很多大牛,神犇为我们做了很多工作,我们需要做的只不过是在他们的基础上加上一点我们自己的数据,就可以得到我们想要的效果了。

准备数据集

    还是以mnist为例,已经使用了原始mnist数据训练好了一个模型,使用自己的数据,在这个模型的基础上fine-tuning一个自己的模型,不过这次只做五个数字的识别0-4,训练集4000张,每个数字800张,验证集1000张,每个数字200张。将数据装换为LEVELDB格式,并且生成均值文件。

    调整网络参数

使用的lenet网络,首先在输入层data层,修改source和meanfile,根据之前生成的leveldb以及mean.binaryproto最后一层的输出类别,将10改为5,并且修改最后一层的名字。具体修改如下:

fine-tuning_第1张图片

可以看到修改了mean_file的路径,source的路径,还有test里batch_size的大小改为20(因为solver里test_iter的大小设置为100,保证这两个数相乘的大小为2000)train里的batch_size的大小依然为100(因为solver里的test_interval的大小设置为80,,保证这两个数相乘大小为8000)。

fine-tuning_第2张图片

可以看到最后一层的名字友ip2改为ip2-cvpr(所有的ip2都要修改为ip2-cvpr)。还有num_output的大小由10改为5,因为只做5个数字的分类。调整学习率,因为最后一层是重新学习的,因此需要有更快的学习速率,因此将weight和bias的学习速率加快10倍。

修改solver

fine-tuning_第3张图片

test_interval修改的原因前面已经说过了,base_lr由0.01改为0.001,这个是很重的,fine-tuning的基本学习率不能太大否则会找不到局部最优值。最后的max_iter是我想训练100个epoch每个epoch需要迭代80次。其他的都没有做过什么修改。

开始训练

训练结果

fine-tuning_第4张图片


你可能感兴趣的:(caffe学习笔记,win-caffe)