浅谈caffe之训练网络

来源:互联网 发布:五官立体知乎 编辑:程序博客网 时间:2024/06/08 17:39

一、理论基础:

1.迁移学习

(1)机器学习可以看作是从一个分布中的采样进行学习,然后泛华到对这个分布中的数据进行预测。那么如果数据不是同一分布来的呢?会否就需要从头再来呢?实际的应用场景中并不是这样。很多时候虽然数据不一样,但可能是相关的。这是因为数据之间有一部分共性。总之,讲到这里主要表达的是,即使是不同的数据,也常常有一部分共性。如果把学习过程粗略分成两个部分,第一部分只关注模型学习各种分布之间的共性,然后再泛化到每一个具体任务就不是难事了。所以很多时候迁移学习也常和多任务学习一起用到。

(2)迁移学习能力的很大一部分来源于分布式表征。因为特征是一层层组合起来的,所以越是底层的特征就越基本,共性也越大。底层的卷积核学到的是边缘、块等特征,这种特征通常称为纹理特征。再高层学到的形状就会更加复杂,到了顶层附近学习到的特征已经可以大概描述一个物体了,这时候的特征常被称为语义特征。

(3)图片分类任务中,缺少大量的数据,如果从头训练一个模型,泛化能力很不好。这种情况下,迁移学习就成了一个理想的选项,可以利用别人已经训练好的模型,然后尝试改变这个模型的语义层面的参数,这样就能得到很好的效果,甚至很多情况下比重新训练的效果还要好。这种方法就是模型微调法。

2.模型微调法

(1)模型微调阀的做法是:首先,训练开始时用一个别人已经在大量数据集上训练好的模型和参数作为起始点;其次,固定前面层的参数不动,只让后面一层或几层的参数在少量数据上进行学习。

(2)caffe进行finetune的机制非常简单,只要网络定义中出现的层的名字在caffemodel文件中能够找到就可以读取,否则就按一般情况初始化。所以基于预训练,主要的改动有数据层和最后的全连接层。

(3)具体做法:数据层换成自己的lmdb数据,最后的全连接输出改为自己数据的类别数,并对计算精度和loss的层做相应的改动。参数上对所有的scale层与一个或两个卷积层进行梯度下降。即把提到的卷积层、scale层和全连接层以外所有其它学习率参数lr_mult设置为0就可以了。


二、用caffe训练网络有三种方式(与tensorflow一样):

1.从头到尾进行训练(不建议)

这种训练方式效果不好,不仅需要很多数据量还会对机器造成很大压力,准确度也不高

2.微调预训练的网络模型

这是经常采用的方法,对使用场景、数据增加或者改变三种情况都适用。这种方法对数据、机器的要求都较低,准确度去油很好提升。

三、什么是微调预训练网络模型?

采用别人已经训练好的模型,在自己的数据上重新训练一遍。主要是针对场景、数据增加或者改变三种情况发生变化时用到。

四、为何可以微调?

别人用自己的数据训练好的模型,为何用自己的数据(与别人的不同)也可以在预训练模型上再训练呢?主要是卷积网络抽取的是通用的图像特征,采用训练好的模型在自己的数据上重新训练即可符合自己的要求。当然,全连接层不可以,微调也可以说是重新训练全连接层。

原创粉丝点击