卷积神经网络之迁移学习

如果你要做一个计算机视觉应用,相比于从头训练权重,或者说从随机初始化权重开始,如果你下载别人已经训练好的网络结构的权重,那么你的进展会相当快。用这个预训练,然后转换到你感兴趣的任务上。

         假如说你要建立一个猫的检测器,用来检测你自己的宠物猫,我们这里分类3个类别,Tigger、Misty和neither。

方法:

1)首先下载别人的网络及其权重,比如说ImageNet比赛的网络,其有1000类的输出。

2)去掉这个网络的最后一层softmax层,创建自己的softmax单元,比如这里输出Tigger、Misty和neither三个类别。

3)就网络而言,建议把所有的层都冻结住,即冻结住所有层的参数,只需要训练和刚才新创建的softmax层有关的参数

         通过使用其他人预训练的权重,你很可能得到很好的性能,即使只有一个小的数据集。

  如果有比较多的数据集,这种情况下,你应该冻结更少的层,比如冻结前面部分层,然后训练后面的层

 

  如果你有越多的数据,你需要冻结的层数就越少,你能够训练的层数就越多。

  如果你有大量的数据,你应该做的就是用开源的网络和它的权重,把整个的当做初始化,然后训练整个网络,当然,如果你的分类数量与原网络不同,那么你需要换成你自己的softmax输出层。

  换句话说,如果你有越多的标定的数据,你就可以训练越多的层,极端情况下,你可以用下载的权重只作为初始化,用它们来代替随机初始化,接着你可以用梯度下降法训练,更新网络所有的层的权重。

数据扩充

         大部分的计算机视觉任务使用很多的数据,所以数据增强(data augmentation)是经常使用的一种技巧来提高计算机视觉系统的表现能力

数据增强方法

1)垂直镜像对称

 

2)随机裁剪(Random Cropping)

  可以看出,随机裁剪有时候裁剪的并不好,但是,在实践中还是很有用的。

3)色彩转换(Color shifting)、颜色扭曲(Color distortions)

 

  一般RGB的更改是根据某种概率分布来决定的,这样做的理由是,比如说有时候可能阳光会有点偏黄,或者由于灯光照明,会导致改变图像的颜色。对RGB有不同的采样方式,其中一种算法是PCA(主成分分析),在AlexNet论文中有讲述。

  另外,还可以旋转图片,shearing,Local wraping等

  多次裁剪方法:对原始图像,1个中心区域裁剪 + 4个角度裁剪,然后将图像镜像,做相同的处理,总共10个crop

内容主要来自与:

Andrew Ng的卷积神经网络课程

原文地址:https://www.cnblogs.com/hejunlin1992/p/8449504.html