aihot  2017-12-04 10:44:53  机器学习 |   查看评论   

机器学习进阶笔记之四 | 深入理解GoogLeNet

引言

 

  TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,被广泛用于语音识别或图像识别等多项机器深度学习领域。其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow代表着张量从图象的一端流动到另一端计算过程,是将复杂的数据结构传输至人工智能神经网中进行分析和处理的过程。

 

  TensorFlow完全开源,任何人都可以使用。可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。

 

  『机器学习进阶笔记』系列将深入解析TensorFlow系统的技术实践,从零开始,由浅入深,与大家一起走上机器学习的进阶之路。

 

  GoogLeNet是ILSVRC 2014的冠军,主要是直径经典的LeNet-5算法,主要是Google的team成员完成,paper见Going Deeper with Convolutions.相关工作主要包括LeNet-5、Gabor filters、Network-in-Network.Network-in-Network改进了传统的CNN网络,采用少量的参数就轻松地击败了AlexNet网络,使用Network-in-Network的模型最后大小约为29MNetwork-in-Network caffe model.GoogLeNet借鉴了Network-in-Network的思想,下面会详细讲述下。

 

Network-in-Network

Network-in-Network

  左边是我们CNN的线性卷积层,一般来说线性卷积层用来提取线性可分的特征,但所提取的特征高度非线性时,我们需要更加多的filters来提取各种潜在的特征,这样就存在一个问题,filters太多,导致网络参数太多,网络过于复杂对于计算压力太大。

文章主要从两个方法来做了一些改良:1,卷积层的改进:MLPconv,在每个local部分进行比传统卷积层复杂的计算,如上图右,提高每一层卷积层对于复杂特征的识别能力,这里举个不恰当的例子,传统的CNN网络,每一层的卷积层相当于一个只会做单一任务,你必须要增加海量的filters来达到完成特定量类型的任务,而MLPconv的每层conv有更加大的能力,每一层能够做多种不同类型的任务,在选择filters时只需要很少量的部分;2,采用全局均值池化来解决传统CNN网络中最后全连接层参数过于复杂的特点,而且全连接会造成网络的泛化能力差,Alexnet中有提高使用dropout来提高网络的泛化能力。

dropout

  最后作者设计了一个4层的Network-in-network+全局均值池化层来做imagenet的分类问题.

  1.  class NiN(Network):
  2.      def setup(self):
  3.          (self.feed('data')
  4.               .conv(11, 11, 96, 4, 4, padding='VALID', name='conv1')
  5.               .conv(1, 1, 96, 1, 1, name='cccp1')
  6.               .conv(1, 1, 96, 1, 1, name='cccp2')
  7.               .max_pool(3, 3, 2, 2, name='pool1')
  8.               .conv(5, 5, 256, 1, 1, name='conv2')
  9.               .conv(1, 1, 256, 1, 1, name='cccp3')
  10.               .conv(1, 1, 256, 1, 1, name='cccp4')
  11.               .max_pool(3, 3, 2, 2, padding='VALID', name='pool2')
  12.               .conv(3, 3, 384, 1, 1, name='conv3')
  13.               .conv(1, 1, 384, 1, 1, name='cccp5')
  14.               .conv(1, 1, 384, 1, 1, name='cccp6')
  15.               .max_pool(3, 3, 2, 2, padding='VALID', name='pool3')
  16.               .conv(3, 3, 1024, 1, 1, name='conv4-1024')
  17.               .conv(1, 1, 1024, 1, 1, name='cccp7-1024')
  18.               .conv(1, 1, 1000, 1, 1, name='cccp8-1024')
  19.               .avg_pool(6, 6, 1, 1, padding='VALID', name='pool4')
  20.               .softmax(name='prob'))

   网络基本结果如上,代码见GitHub - ethereon/caffe-tensorflow: Caffe models in TensorFlow.

 1/6    1 2 3 4 5 6 下一页 尾页
  
 

除特别注明外,本站所有文章均为 人工智能学习网 原创,转载请注明出处来自机器学习进阶笔记之四 | 深入理解GoogLeNet

留言与评论(共有 0 条评论)
   
验证码: