MXNet:迁移学习与实践
质量声明:原创文章,内容质量问题请评论吐槽。如对您产生干扰,可私信删除。
主要参考:李沐等:动手学深度学习-伯克利教材
文章目录
摘要: 深度框架MXNet学习笔记,以迁移学习的方法,微调 ResNet 进行狗狗品种分类.
迁移学习
虽然深度网络适用的数据集并不相同,但模型抽取的图像特征都是比较通用的,如边缘、纹理、形状和物体组成等,这些类似的特征对于其他场景或者目标可能也同样有效。迁移学习(transfer learning),就是将从源数据集学到的知识迁移到⽬标数据集上。微调(fine tuning)是迁移学习中的⼀种常⽤技术。假设模型在源数据集上学到的知识同样适用于目标数据集,且源模型输出层与源数据集标签紧密相关,从头训练输出层,而其余层参数由源模型参数微调得到
。当目标数据集远小于源数据集时,微调有助于提升模型的泛化能力
。微调步骤如下:
- 在源数据集(如ImageNet数据集)上预训练一个源模型
- 通过复制源模型的结构和参数(除了输出层)创建目标模型
- 为目标模型添加类别匹配的输出层,并随机初始化该层的模型参数
- 在目标数据集上训练目标模型
gluonCV
推荐阅读GluonCV的缘来和简介:李沐:GluonCV — 计算机视觉的深度学习工具包
- GluonCV项目网站 https://gluon-cv.mxnet.io/,Github仓库 https://github.com/dmlc/gluon-cv
- 预训练的源模型实例含有两个成员变量,即
features
包含模型除输出层以外的所有层,output
为模型的输出层,这样划分主要是为了方便微调除输出层以外所有层的模型参数 - 由于features中的模型参数被初始化为在源数据集上预训练得到的参数,已经足够好,因此一般只需使用较小的学习率
????
来微调;而output中的模型参数是随机初始化,一般需要更大的学习率10????
从头训练