转移学习为何要删除最后一个隐藏层?

时间:2018-06-24 11:18:14

标签: python machine-learning keras convolutional-neural-network transfer-learning

在阅读有关迁移学习的博客时,通常会说-删除最后一层,或删除最后两层。也就是说,删除输出层和最后一个隐藏层。

因此,如果转移学习意味着还更改成本函数,例如从交叉熵到均方误差,我知道您需要将最后一个输出层从1001的softmax值层更改为Dense(1)层,该层输出浮点数,但是:

  1. 为什么还要更改最后一个隐藏层?
  2. 如果使用Keras以及具有imagenet权重的预定义CNN模型之一,那么将初始化最后两个新层的权重是多少?他初始化还是0初始化?

2 个答案:

答案 0 :(得分:2)

为什么要删除图层?

如果您仅尝试更改成本函数,那么您并没有按照大多数人的定义进行迁移学习。转移学习主要是关于迁移到新的应用程序域。因此,对于图像,采用狗识别器/探测器并将其转换为鸟类识别器/探测器,而不是狗的年龄/体重猜测者。 (或者带上您的1001通用目标检测器,并仅使用它来查看安全摄像机镜头等)

大多数文献都说,较低水平的CNN正在学习一些像素的大小的低水平概念,这是相当通用的。中间层是对象检测器,对应于眼球或鼻子,顶层是最高层,指定了这些中间层对象相对于彼此的位置,并表示最高层特征。最后一个softmax只是在说哪种狗。这些最后的,最高级别的功能可能与新任务无关。

  

这是出于以下观察的动机:   ConvNet包含更多通用功能(例如边缘检测器或颜色   blob探测器)应该对许多任务有用,但在以后的层中   的ConvNet逐渐变得更加具体于   原始数据集中包含的类。

     

来自:http://cs231n.github.io/transfer-learning/

以下是其他几种解释: https://machinelearningmastery.com/transfer-learning-for-deep-learning/

https://medium.com/nanonets/nanonets-how-to-use-deep-learning-when-you-have-limited-data-f68c0b512cab

新图层应初始化为什么?

在您最初的问题中,您询问“他初始化还是0初始化?”。再次,我认为这更多是工程问题,因为有证据表明某些事情比其他事情更好,但是我不知道还存在一个被广泛接受的证据,可以保证一种方法的最佳性能。除非不要将所有内容都初始化为零。如您所见,in the first post I link to below绝对是错误的。还请记住,这只是初始化。因此,即使我的知识有点过时了,也应该花些额外的时间来训练副手彻底失败或破烂的答案。根据您的问题,可能是大笔成本还是小笔成本,这将决定您要花多少时间研究这些选件并进行小规模尝试。

http://andyljones.tumblr.com/post/110998971763/an-explanation-of-xavier-initialization

https://datascience.stackexchange.com/questions/13061/when-to-use-he-or-glorot-normal-initialization-over-uniform-init-and-what-are/13362

https://stats.stackexchange.com/questions/229885/whats-the-recommended-weight-initialization-strategy-when-using-the-elu-activat

答案 1 :(得分:-1)

  1. 在Keras中,对于Inception v3,如果要更改输出层,则还将删除最后一个隐藏层。默认情况下,最后一个隐藏层是globalAveragePooling,但是根据问题域的不同,可能更喜欢globalAveragePooling或globalMaxPooling
  2. 默认情况下,Keras使用Glorot统一初始化程序(也称为Xavier统一初始化程序)初始化密集层。