在阅读有关迁移学习的博客时,通常会说-删除最后一层,或删除最后两层。也就是说,删除输出层和最后一个隐藏层。
因此,如果转移学习意味着也改变成本函数,例如从交叉熵到均方误差,我知道您需要将最后一个输出层从softmax值的1001层更改为输出浮点的Dense(1)层,但是:
为什么还要更改最后一个隐藏层?
如果使用Keras和具有imagenet权重的预定义CNN模型之一,则最后两个新层将使用什么权重初始化?他初始化还是0初始化?
最佳答案
为什么要删除图层?
如果您只是试图更改成本函数,那么您就不会按照大多数人的定义进行转移学习。转移学习主要是关于迁移到新的应用程序域。因此,对于图像,采用狗识别器/探测器并将其转换为鸟类识别器/探测器,而不是狗的年龄/体重猜测者。 (或者带上您的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
关于python - 转移学习为何要删除最后一个隐藏层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51009404/