1. GoogLeNet
1.1 概述

1.一般来说提升网络性能最直接的方案是增加网络的深度(层次)和宽度(神经元数量),但这会存在以下一些问题:

a. 参数太多,但训练数据集有限,容易产生过拟合;  
b. 网络越大,参数越多,计算复杂度增大,难以应用;  
c. 网络越深,容易产生梯度弥散(即梯度逐步消失),无法优化;
  1. 理论上减少参数一个办法就是采用稀疏策略即用部分连接代替全连接,但在实际上由于硬件优化的问题,稀疏连接并无法形成优化,计算时间可能差不多;
  2. 所以大量文献采用将稀疏矩阵聚类成一些密集的子矩阵,GoogLeNet就是在此基础上提出了Inception,分为v1\v2\v3\v4等多个版本
1.2 Inception v1

GRU神经网络图示 go 神经网络_GRU神经网络图示

  1. inception v1对于每一层同时做了多种操作的聚合
1.2 GoogLeNet的网络结构

GRU神经网络图示 go 神经网络_GRU神经网络图示_02

第0层(输入):

  1. 原始图像输入为224x224x3
  2. 图像做零均值化操作,即每个像素减去均值

第1层(卷积层):

  1. 使用64个7x7的卷积核, 滑动步长为2, padding为3 =》输出为 112x112x64;
  2. 卷积后进行relu操作
  3. 之后进行3x3的池化(步长为2)操作 => 输出为56x56*56
  4. 池化操作后进行relu操作

第二层(卷积层):

  1. 使用192个3x3卷积核,滑动步长为1, padding为1 =》输出为56x56x192
  2. 卷积后进行relu操作
  3. 之后进行3x3的池化(步长为2)操作 =》 输出为28x28x192
  4. 池化操作后进行relu操作

第三层(Inception 3a层):

GRU神经网络图示 go 神经网络_卷积核_03

  1. 四个分支同时操作,即所谓的Inception算法
分支1: 采用64个1x1卷积核,步长为1,并进行relu => 输出28x28x64  
分支2:
    2.1 (降维)采用96个1x1卷积核,步长为1,并进行relue => 输出28x28x96  
    2.2 采用128个3x3卷积核,步长为1 => 输出为28x28x128
    
分支3:
    3.1 (降维)采用16个5x5卷积核,步长为1,并进行relu => 输出28x28x16  
    3.2 采用32个5x5卷积核,步长为2 => 输出为28x28x32
分支4:
    4.1 用3x3步长为1进行池化操作 => 输出28x28x192  
    4.2 用32个1x1的卷积核进行卷积操作,=> 输出28x28x32
  1. 并联上述四组操作,其实就是拼接第三维,输出为 28 x 28 x (64 + 128 + 32 + 32) = 28 x 28 x 256

第四层(Inception 3b层):

GRU神经网络图示 go 神经网络_池化_04

第五层(Inception 4a层):

GRU神经网络图示 go 神经网络_卷积_05

第六层(Inception 4b层):

GRU神经网络图示 go 神经网络_卷积_06

第七层(Inception 4c层):

GRU神经网络图示 go 神经网络_GRU神经网络图示_07

第八层(Inception 4d层):

GRU神经网络图示 go 神经网络_池化_08

第九层(Inception 4e层):

GRU神经网络图示 go 神经网络_池化_09

第十层(Inception 5a层):

GRU神经网络图示 go 神经网络_GRU神经网络图示_10


第十一层(Inception 5b层):

GRU神经网络图示 go 神经网络_卷积_11


第十二/三层(平均池化 + softmax):

GRU神经网络图示 go 神经网络_池化_12