【深度学习系列】迁移学习Transfer Learning
在前面的文章中,我们通常是拿到一个任务,譬如图像分类、识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性、时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型,所以这个时候迁移学习就派上用场了。
什么是迁移学习?
为什么需要迁移学习?
- 满足深度学习训练数据量的数据太少。对于一个机器学习的任务,譬如分类,如果数据量过小,我们是否一定要上深度学习呢?其实不必然。如果在实际的生产过程中,能够用规则就能得到好的效果的就用规则,能够用简单的模型就用简单的模型,我们常听到的“奥卡姆剃刀”其实就是这个意思,减少模型的复杂度,能够从某种程度上避免过拟合的情况。那么对于小量数据集,没有必要一定需要用深度学习的方法来做。同样,如果要对一个新任务分类,或者识别,搜集不了大量的正负样本,怎么训练呢?
新数据集相比于原数据集更小但内容很不相同。由于数据较小,只训练一个线性分类器可能更好。因为数据集不同,从网络顶部就开始训练分类器可能不是最好的选择,这包含更多的数据集特定特征。另外,从网络前部的激活函数开始训练分类器可能更好一点。
新数据集相比于原数据集较大,但内容非常不同。由于数据集很大,我们可能会期望从头开始训练一个 DCNN。然而,在实践中从一个预训练模型开始初始化权重仍然是一种有益的方法。在这种情况下,我们会有足够的数据和信心对整个网络进行微调。
如何做迁移学习?
在实践中,我们通常不会完全从头开始随机初始化训练 DCNN,这是因为有能满足深度网络需求的足够大小的数据集相当的少见。作为代替,常见的是在一个大型数据集上预训练一个 DCNN,然后使用这一训练的 DCNN 的权重作为初始设置或作为相关任务的固定的特征提取器。 举个例子,我们知道Imagnet是目前最大的图像识别数据库,目前已经有很多基于imagenet数据训练的网络模型,如inceptionv3、v4等,假如现在给你一个任务,希望你能做一个车系识别,你有两个选择:
一是搜集大量的车系数据,对这些车系数据进行模型训练;
二是基于imagenet训练好的网络模型,然后把搜集好的车系数据加到基于之前训练好的模型继续训练,进行fine-tuning。
传统的做法都是第一种,但是这就会遇到一个问题,一是车系的图片够不够多,体量够不够大?如果数据量不够,最后训练的效果会不会很不好?其实我们可以通过 把ImageNet 或其他大型数据集学习到的网络特征运用于一个图片分类或其他基于图片特征的任务,这就是迁移学习的思想。其实可以这样理解,如果从零开始训练,那么初始化权重一般情况下要么是都为0,要么随机设置,当我们导入了在大规模数据集上训练好的模型后,相当于在以这个模型现有的参数作为初始化的权重,不过至于在具体的任务上的泛化能力如何,还是得看具体的场景。
迁移学习的限制
上文提到我们在迁移学习中会使用预训练的网络,所以我们在模型架构方面受到了一点点限制。比如说,我们不能随意移除预训练网络中的卷积层。但由于参数共享的关系,我们可以很轻松地在不同空间尺寸的图像上运行一个预训练网络。这在卷积层和池化层和情况下是显而易见的,因为它们的前向函数(forward function)独立于输入内容的空间尺寸。在全连接层(FC)的情形中,这仍然成立,因为全连接层可被转化成一个卷积层。
迁移学习的相关资料
对迁移学习感兴趣的同学,可以关注这个github repo:transferlearning,以及王晋东写的系列文章:
《小王爱迁移》系列之六:学习迁移(Learning To Transfer)
《小王爱迁移》系列之七:负迁移(Negative Transfer)
《小王爱迁移》系列之九:开放集迁移学习(Open Set Domain Adaptation)
《小王爱迁移》系列之十:张量迁移学习(tensor unsupervised domain adaptation)
《小王爱迁移》系列之十一:选择性对抗迁移学习(Selective Adversarial Network)
《小王爱迁移》系列之十二:新年新气象-重新整理的迁移学习资源仓库
【深度学习系列】迁移学习Transfer Learning的更多相关文章
- 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)
基于深度学习和迁移学习的识花实践(转) 深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...
- AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清
摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习 (Deep Learning).强化学习 (Reinforcement Learning).迁移学习 (Transfer Learning ...
- keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)
引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...
- 读论文系列:Deep transfer learning person re-identification
读论文系列:Deep transfer learning person re-identification arxiv 2016 by Mengyue Geng, Yaowei Wang, Tao X ...
- DNN结构构建:NAS网络结构搜索和强化学习、迁移学习
前言 谷歌推出的NASNet架构,用于大规模图像分类和识别.NASNet架构特点是由两个AutoML设计的Layer组成--Normal Layer and Reduction Layer,这样的效果 ...
- java8 学习系列--NIO学习笔记
近期有点时间,决定学习下java8相关的内容: 当然了不止java8中新增的功能点,整个JDK都需要自己研究的,不过这是个漫长的过程吧,以自己的惰性来看: 不过开发中不是有时候讲究模块化开发么,那么我 ...
- 迁移学习( Transfer Learning )
在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型:然后利用这个学习到的模型来对测试文档进行分类与预测.然而,我们看到机器学习算法在当前的Web挖掘研究中存在着一个关 ...
- 【迁移学习】2010-A Survey on Transfer Learning
资源:http://www.cse.ust.hk/TL/ 简介: 一个例子: 关于照片的情感分析. 源:比如你之前已经搜集了大量N种类型物品的图片进行了大量的人工标记(label),耗费了巨大的人力物 ...
- 迁移学习(Transfer Learning)(转载)
原文地址:http://blog.csdn.net/miscclp/article/details/6339456 在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型 ...
- 迁移学习-Transfer Learning
迁移学习两种类型: ConvNet as fixed feature extractor:利用在大数据集(如ImageNet)上预训练过的ConvNet(如AlexNet,VGGNet),移除最后几层 ...
随机推荐
- BCB F12切换界面 显示异常
亲们,我偶遇了一个小怪兽F12切换界面,效果如下: 还没有解决办法:
- (译)Web是如何工作的(3):HTTP&REST
原文地址:https://medium.freecodecamp.org/how-the-web-works-part-iii-http-rest-e61bc50fa0a 我们在第一篇文章中介绍了 ...
- strace命令【转】
strace命令使用: strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用 ...
- JavaScript闭包的深入理解
闭包算是javascript中一个比较难理解的概念,想要深入理解闭包的原理,首先需要搞清楚其他几个概念: 一.栈内存和堆内存 学过C/C++的同学可能知道,计算机系统将内存分为栈和堆两部分(大学的基础 ...
- Ubuntu下配置ShadowS + Chrome
// 这是一篇导入进来的旧博客,可能有时效性问题. 题目和全文中的ShadowS指代以ShadowS开头名字的某工具,以预防文章被和谐.本机Ubuntu 14.04 LTS.在apt-get upda ...
- 【经验总结】Java在ACM算法竞赛编程中易错点
一.Java之ACM易错点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非 ...
- tju_4147 kd树+最小生成树
kd树模板+全图最小生成树 标签(空格分隔): kd树+最小生成树 题目链接 题意: k维太空中有n个点,每个点可以与距离它m近的点连边,现在给你一堆点,并给出坐标,现在要建立通信网络,一些可以互相到 ...
- hdu_1045Fire Net(二分图匹配)
hdu_1045Fire Net(二分图匹配) 标签: 图论 二分图匹配 题目链接 Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- 快速搭建appium自动测试环境
首先申明本文是基本于Python与Android来快速搭建Appium自动化测试环境: 主要分为以下几个步骤: 前提条件: 1)安装与配置python环境,打开 Python官网,找到"Do ...
- win处navicat直接导出的sql脚本导入Linux mysql报错问题
最近几天在把win上的项目的数据库转移到Ubuntu,于是第一件事就是从win处的navicat直接导出sql脚本,然后进入Ubuntu导入的时候会报错误,跳过错误继续执行导致数据库表的缺失. 跨平台 ...