深度网络 Fine-tuning方法简介

来源:互联网 发布:淘宝手机端图片 编辑:程序博客网 时间:2024/05/20 23:36

迁移学习

有两种方式,一是卷积网络作为固定的特征提取器.拿到一个预训练好的卷积网络,去掉全连接层,吧其余的部分作为一个特征提取器.alex网络会计算一个4096D的特征向量,称之为cnn codes.有了这些特征很容易训练一个线性分类器.
另外一种方式是fine-tuning卷积网络,是本文主要介绍的内容.该方法中不仅替换掉了顶层的全连接层,而且会改变预训练网络中的权值数据.这里既可以改变全部的网络参数,也可以只改变其中一部分的参数.
使用已经训练过的模型参数,经过调整,改变模型的结构,重新开始训练,达到新的最优模型.如果原始的网络中没有新的层需要的层,那么就使用随机的权重.降低base_lr学习的速度,提高新引入的层的学习速度lr_mult.

caffe % ./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0

使用-weight会告知caffe,需要加载一个网络模型,然后再开始训练

model zoo

可以下载其中预训练的模型来使用.model zoo

When and how to fine-tune

  1. the size of the new dataset (small or big),
  2. 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.

0 0