卷积神经网络(三)
——inception网络、迁移学习
(原创内容,转载请注明来源,谢谢)
一、Inception网络
1、简介
前面的文章中,有各种的卷积模型可以选择,而具体如何选择各种模型,实际上也可以让机器自动选择。
下面是一个前一层的输出结果,为28*28*192的数据,可以同时经过1*1、3*3、5*5、池化层四种处理,得到输出的结果,并且把输出结果进行拼接。
2、卷积优化
实际上在数据量大的时候,卷积的计算量也很大(虽然比全连接层已经好了很多)。28*28*192的数据,经过5*5的卷积,计算量约需要1.2亿次乘法。
下面考虑另一种方式,在5*5卷积之前,加入一个1*1卷积,先把上一层的输出进行压缩,然后再进行5*5的卷积,如下图所示,计算量约1240万次,是直接进行卷积的计算量的1/10。
这里的输入输出的维度都是一样的,只不过中间加了一层1*1的卷积,减少了计算量,这里的1*1卷积称为瓶颈层(bottleneck layer)。
经过研究人员的分析,这种瓶颈层虽然压缩了上一层的输出,但是不会造成很大的损失,而且减少了运算。
3、inception模块
因此,实际上的inception模块,就是同时进行了各种类型的卷积,包括池化,把计算结果进行信道的连接。
二、迁移学习
迁移学习,即把现有的神经网络,进行细微的改造训练,以得到自己想要的分类器的结果。
假设现有一个已经训练好的深度学习神经网络(例如GitHub开源等),现在需要一个三分类器。
1、训练数据量不足
当训练数据很少,则可以只改造现有网络的输出层,自己训练一个softmax,把前面所有的层当做黑盒,不进行训练,只使用训练结果。
为了计算速度更快,可以把前面的输出结果存储,作为输入层,这样只需要训练2层的神经网络即可。
2、训练数量较多
当训练数据较多,则除了替换softmax,还可以在softmax之前,加入几层的隐藏层,这样训练效果更好。
3、训练数据非常大量
当拥有非常大量的训练数据,则可以只把现有的网络当做初始化,而自己完全训练一个神经网络。
迁移学习的优点,在于可以合理利用现有的网络。当神经网络非常大型时,前面几层的训练通常是可以共用的,这也是迁移学习可以实现的原理。
对于计算机视觉,需要大量的数据,而且运算量很大,合理利用现有训练好的网络,进行迁移学习,可以提高工作效率。
三、数据扩充
数据扩充,这个之前提过,这里再简单说一下。
数据扩充的目的,是为了增加训练数据。常用的方法有:对图片进行镜像、随机修剪、旋转、扭曲、色彩转换(运用PCA增强法)等。
实际工作的时候,可以一边用程序处理图片,一边进行后续的训练。具体做法,可以用多线程,部分线程读取硬盘的图片,并进行上述的镜像、旋转等工作,处理完成一部分图片后,小批量的把图片传给训练参数的线程;另一部分线程,则读取图片,并且进行参数的训练。
——written by linhxx 2018.03.10