图像识别,迁移学习调参入门

举图像识别中最常见的例子,训练一个神经网络。来识别不同的品种的猫,你若是从头开始训练,你需要百万级的带标注数据,海量的显卡资源。而若是使用迁移学习,你可以使用Google发布的Inception或VGG16这样成熟的物品分类的网络,只训练最后的softmax层,你只需要几千张图片,使用普通的CPU就能完成,而且模型的准确性不差。

使用迁徙学习时要注意,本来预训练的神经网络,要和当前的任务差距不大,不然迁徙学习的效果会很差。例如如果你要训练一个神经网络来识别肺部X光片中是否包含肿瘤,那么使用VGG16的网络就不如使用一个已训练好的判断脑部是否包含肿瘤的神经网络。后者与当前的任务有相似的场景,很多底层的神经员可以做相同的事,而用来识别日常生活中照片的网络,则难以从X光片中提取有效的特征。

另一种迁移学习的方法是对整个网络进行微调,假设你已训练好了识别猫品种的神经网络,你的网络能对50种猫按品种进行分类。接下来你想对网络进行升级,让其能够识别100种猫,这时你不应该只训练网络的最后一层,而应该逐层对网络中每个节点的权重进行微调。显然,只训练最后几层,是迁移学习最简单的1.0版,而对节点权重进行微调(fine turing),就是更难的2.0版,通过将其他层的权重固定,只训练一层这样的逐层训练,可以更好的完成上述任务。

另一种迁移学习的方式是借用网络的结构,即不是使用已训练好的网络的权重,而是使用相同的网络结构,例如多少层,每层多少节点这样的信息,然后使用随机生成的权重作为训练的起点。例如你要训练世界上第一个识别fMRI图像的神经网络,你就可以借鉴识别X光图片的神经网络。

在这里插入图片描述

这幅图说明了该用哪种迁移学习,让我们逐个来看。

1)右下角场景,待训练的数据集较小,已训练的模型和当前任务相似。此时可以只是重新训练已有模型的靠近输出的几层,例如将ImageNet中输出层原来可以判别一万种输出的网络改的只能判别猫的品种,从而利用已有网络来做低层次的特征提取。

2)左下角场景,待训练的数据集较小,已训练的模型和当前任务场景差距较大。例如你有的已训练网络能识别出白天高速路上的违章车辆,你需要训练一个能识别出夜间违章车辆的模型,由于不管白天夜晚,交通规则是没有变化的,所以你需要将网络靠近输入的那几层重新训练,等到新的网络能够提取出夜间车辆的基本信息后,就可以借用已有的,在大数据集下训练好的神经网络来识别违章车辆,而不用等夜间违章的车辆的照片积累的足够多之后再重新训练。

3)左上角场景,待训练的数据集较大,已有的模型和新模型的数据差异度很高。此时应该做的是从头开始,重新训练。

4)右上角场景,待训练的数据集较大,已有模型的训练数据和现有的训练数据类似。此时应该使用原网络的结构,并保留每一层的节点权重,再逐层微调。

接下来看一个实际的例子,大家都熟悉的MINST手写数字识别,也可以用迁移学习来做,已有的训练数据是六万张图片,已有的模型是通用的图像识别模型VGG16,看起来,我们即可以将网络的最高层重新训练,也可以训练网络的最初几层,毕竟手写数字的图片,和我们日常见到的图片即相似也有明显不同。点击阅读原文,可以查看具体的python代码。

总结一下,迁移学习应用广泛,尤其是在工程界,不管是语音识别中应对不同地区的口音,还是通过电子游戏的模拟画面前期训练自动驾驶汽车,迁移学习已深度学习在工业界之所以成功的最坚实支柱,而学术界对迁移学习的研究则关注以下几点,一是通过半监督学习减少对标注数据的依赖,应对标注数据的不对称性,二是用迁移学习来提高模型的稳定性和可泛化性,不至于因为一个像素的变化而改变分类结果,三是使用迁移学习来做到持续学习,让神经网络得以保留在旧任务中所学到的技能。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值