博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习工程师 - Udacity 迁移学习
阅读量:5321 次
发布时间:2019-06-14

本文共 1645 字,大约阅读时间需要 5 分钟。

迁移学习是指对提前训练过的神经网络进行调整,以用于新的不同数据集。

取决于以下两个条件:

  • 新数据集的大小,以及
  • 新数据集与原始数据集的相似程度

使用迁移学习的方法将各不相同。有以下四大主要情形:

  1. 新数据集很小,新数据与原始数据相似
  2. 新数据集很小,新数据不同于原始训练数据
  3. 新数据集很大,新数据与原始训练数据相似
  4. 新数据集很大,新数据不同于原始训练数据

大型数据集可能具有 100 万张图片。小型数据集可能有 2000 张图片。大型数据集与小型数据集之间的界限比较主观。对小型数据集使用迁移学习需要考虑过拟合现象。

狗的图片和狼的图片可以视为相似的图片;这些图片具有共同的特征。鲜花图片数据集不同于狗类图片数据集。

四个迁移学习情形均具有自己的方法。在下面的几节内容中,我们将分别查看每个情形。

 

演示网络

为了解释每个情形的工作原理,我们将以一个普通的预先训练过的卷积神经网络开始,并解释如何针对每种情形调整该网络。我们的示例网络包含三个卷积层和三个完全连接层:

下面是卷积神经网络的作用一般概述:

  • 第一层级将检测图片中的边缘
  • 第二层级将检测形状
  • 第三个卷积层将检测更高级的特征

每个迁移学习情形将以不同的方式使用预先训练过的神经网络。

 

情形 1:小数据集,相似数据

如果新数据集很小,并且与原始训练数据相似:

  • 删除神经网络的最后层级
  • 添加一个新的完全连接层,与新数据集中的类别数量相匹配
  • 随机化设置新的完全连接层的权重;冻结预先训练过的网络中的所有权重
  • 训练该网络以更新新连接层的权重

为了避免小数据集出现过拟合现象,原始网络的权重将保持不变,而不是重新训练这些权重。

因为数据集比较相似,每个数据集的图片将具有相似的更高级别特征。因此,大部分或所有预先训练过的神经网络层级已经包含关于新数据集的相关信息,应该保持不变。

以下是如何可视化此方法的方式:

 

情形 2:小型数据集、不同的数据

如果新数据集很小,并且与原始训练数据不同:

  • 将靠近网络开头的大部分预先训练过的层级删掉
  • 向剩下的预先训练过的层级添加新的完全连接层,并与新数据集的类别数量相匹配
  • 随机化设置新的完全连接层的权重;冻结预先训练过的网络中的所有权重
  • 训练该网络以更新新连接层的权重

因为数据集很小,因此依然需要注意过拟合问题。要解决过拟合问题,原始神经网络的权重应该保持不变,就像第一种情况那样。

但是原始训练集和新的数据集并不具有相同的更高级特征。在这种情况下,新的网络仅使用包含更低级特征的层级。

以下是如何可视化此方法的方式:

 

情形 3:大型数据集、相似数据

如果新数据集比较大型,并且与原始训练数据相似:

  • 删掉最后的完全连接层,并替换成与新数据集中的类别数量相匹配的层级
  • 随机地初始化新的完全连接层的权重
  • 使用预先训练过的权重初始化剩下的权重
  • 重新训练整个神经网络

训练大型数据集时,过拟合问题不严重;因此,你可以重新训练所有权重。

因为原始训练集和新的数据集具有相同的更高级特征,因此使用整个神经网络。

以下是如何可视化此方法的方式:

 

情形 4:大型数据集、不同的数据

如果新数据集很大型,并且与原始训练数据不同:

  • 删掉最后的完全连接层,并替换成与新数据集中的类别数量相匹配的层级
  • 使用随机初始化的权重重新训练网络
  • 或者,你可以采用和“大型相似数据”情形的同一策略

虽然数据集与训练数据不同,但是利用预先训练过的网络中的权重进行初始化可能使训练速度更快。因此这种情形与大型相似数据集这一情形完全相同。

如果使用预先训练过的网络作为起点不能生成成功的模型,另一种选择是随机地初始化卷积神经网络权重,并从头训练网络。

以下是如何可视化此方法的方式:

 

课外资料

  • 参阅这篇 ,该论文系统地分析了预先训练过的 CNN 中的特征的可迁移性。
  • 阅读这篇详细介绍 Sebastian Thrun 的癌症检测 CNN 的!

转载于:https://www.cnblogs.com/paulonetwo/p/10060624.html

你可能感兴趣的文章
一些简单的网络流模型
查看>>
动态规划经典问题
查看>>
Eclipse with C++: "Launch failed. Binary not found."
查看>>
drupal中使用drush命令,快速批量的开启和关闭模块
查看>>
[转]理解Go语言中的nil
查看>>
正睿提高组2017模拟题二T2
查看>>
DataPipeline联合Confluent Kafka Meetup上海站
查看>>
JS apply的巧妙用法以及扩展到Object.defineProperty的使用
查看>>
sha1加密java代码
查看>>
hibernate 多对多双向关联
查看>>
Mysql自带的年月日函数
查看>>
源码实现 --> strcmp
查看>>
Js获取下拉框当前选择项的文本和值
查看>>
BtxCMS.Net 项目
查看>>
KVO讲解
查看>>
centOS7 下安装smb服务器
查看>>
toLocaleString
查看>>
易普优APS高级计划排程系统系列提纲:行业知识,业务建模,排程算法,计划可视化,平台框架,案例分享...
查看>>
面试题-链表
查看>>
Opencv Hello World
查看>>