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

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

引言

 

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

 

  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'))

   网络基本结果如上,代码见.

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

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

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]