为什么要fine-tuning?###
我们有自己的图像识别任务,然而我们的数据集太小,直接进行训练很容易出现过拟合现象
所以比较好的解决方案是先在一个大数据集中训练以提取比较准确的浅层特征,然后再针对这个训练过的网络利用我们的数据集进行训练,那么效果就会好很多。这个过程就是fine-tuning。
model zoo###
大家都注意到了这个情况,所以
(1)FeifeiLi带头创建imagenet,这个图像库非常巨大,满足我们预先训练的各种要求,另外近期Google发布Open Images,包含900w labeled images,媲美Imagenet dataset。
(2)有些网络结构非常经典,比如Alexnet,Googlenet,VGGnet,ResNet等等,如果我们想利用这些网络去做自己的应用,就首先要把它们在大数据集(imagenet等等)中训练,然后再用自己的数据训练;显然前面一步是重复的步骤,并且非常耗时耗力(可能花费数台机器数周时间)。所以针对上述问题各种深度学习库(caffe、Tensorflow、torch)等等就预先用经典网络训练在imagenet上训练,把模型(各个参数)公布网上,我们直接拿来用即可,省去了大量pre-train的时间。这些模型(参数)就是model zoo
how to fine-tuning###
1.在imagenet训练最终输出是1000个分类,所以网络结构大概是经典网络—全连接层(前面)—最后的全连接层(1000输出)。
2.如果我们要进行fine-tuning
我们设计自己的网络
(1)经典网络—全连接层(前面)—最后的全连接层(我们的类别输出)
(2)经典网络—全连接层(all new)
(3)经典网络—卷积池化层(new)-全连接层(all new)
上述三种分别对应网络改动从小到大,对应的学习速率会有所区别。
在改动过程中,网络名称相同的参数会直接搬过来,不同的会根据设置初始化
一定注意改动过程中size要匹配!
网友评论