一、迁移学习
对于我们现在学习深度学习来说,可以不需要随机初始化权重然后开始一步一步训练,因为深度学习研究人员已经做出了很多贡献,他们在数据集(COCO ImageNet)上训练,然后将训练好参数的模型开源放在网上,所以下载模型代码的同时,下载了训练好的参数值,这个就是预训练。于是我们把这样一个优秀的模型迁移到我们自己的问题上,就省了相当多的功夫。
假设现在有这么一个模型,最后Softmax输出1000种不同的分类:
然而我们实际上只希望把名字叫做“tigger”和“misty”或其他(neither)这三者分出来,应该怎么做呢?
将Softmax输出层改成我们需要的三类!Softmax之前的每一层都相当于已经训练很好的了,考虑将前面的层都冻结。在不同的框架下,是支持的,比如:
trainableParameters=0/freeze=1
就代表不训练前面层,仅仅训练我们修改的Softmax即可。
如果有很多“tigger”和“misty”的图片呢?数据越多,需要冻结的层数越少! 所以只需要冻结前面几层,后面可以拿来训练,然后Softmax输出你需要的分类。
有足够的数据时,我们甚至可以利用下载的权重作为初始化,然后全部重新训练,这样也可以提高我们的训练效率。
说到为什么迁移学习是有效的,这就要回到之前有一课了。网络中前面那些层中训练出的参数可能提取出了很多特征(比如边缘特征、图像轮廓等等),这些特征是可以应用到另一个数据上的,仅需要少量的修改,就可以实现我们需要的目标。迁移学习就是把大数据集(预训练)上训练的东西搬迁到小数据集(我们的实际需求)上的一个过程。
二、数据扩增
-
镜像
-
随机裁剪
-
旋转(较少)
-
扭曲(较少)
-
剪切(较少)
-
色彩转换
影响颜色转换的算法PCA(主成分分析),在AlexNet论文中有时候被称作颜色增强。
常用的做法是:一个或多个线程做图像扭曲,其他线程做训练。