转自:http://blog.csdn.net/wendox/article/details/52840372
迁移学习
有两种方式,一是卷积网络作为固定的特征提取器.拿到一个预训练好的卷积网络,去掉全连接层,吧其余的部分作为一个特征提取器.alex网络会计算一个4096D的特征向量,称之为cnn codes.有了这些特征很容易训练一个线性分类器.
另外一种方式是fine-tuning卷积网络,是本文主要介绍的内容.该方法中不仅替换掉了顶层的全连接层,而且会改变预训练网络中的权值数据.这里既可以改变全部的网络参数,也可以只改变其中一部分的参数.
使用已经训练过的模型参数,经过调整,改变模型的结构,重新开始训练,达到新的最优模型.如果原始的网络中没有新的层需要的层,那么就使用随机的权重.降低base_lr学习的速度,提高新引入的层的学习速度lr_mult.
- 1
- 1
使用-weight会告知caffe,需要加载一个网络模型,然后再开始训练
model zoo
可以下载其中预训练的模型来使用.model zoo
When and how to fine-tune
- the size of the new dataset (small or big),
- its similarity to the original dataset (e.g. ImageNet-like in terms of the content of images and the classes, or very different, such as microscope images).
一般根据以上2个因素判断,新使用的数据集的大小,两个数据集合的相似程度.可以知道的是网络的底层要比上层更加 generic
注意
ConvNet features are more generic in early layers and more original-dataset-specific in later layers
这里给出的建议是
1. 如果新的数据集比较小,和原始的数据集合类似,那么fine-tuning是不需要的.最好十一训练一个基于cnn codes的线性分类器
2. 如果新的数据集比较大,和原始的数据集合类似,因此可以自信的开始fine-tuning,而不必担心过拟合.
3. 如果新的数据集比较小,和原始的数据集合差异性比较大.最好是只训练一个线性分类器.从顶层开始线性分类器是不合适的,最好是从比较低的层开始训练一个SVM分类器.
4. 如果新的数据集比较小,和原始的数据集合差异性比较大.因此可以从头训练,但是有预训练的参数是有益的.
由预训练网络带的限制,我们需要遵循原始使用的网络结构,但是由于权重共享的使用,输出图像的大小是不受限制的.对于全连接层,仍然是可以的,因为全连接层可以转化为为卷积层.
训练速度最好降低,是的底层的网络的参数变化比较缓慢.
refer
How transferable are features in deep neural networks? studies the transfer learning performance in detail, including some unintuitive findings about layer co-adaptations.