- 计划将所有的经典模型使用pytorch在搞一遍
- 接上一篇NIN现实mnist手写识别
- 使用经典模型GoogLeNet模型实现相同的功能
- GoogLeNet论文原文地址
GoogLeNet简介
GoogLeNet是2014年提出的一种全新的深度学习结构,在这之前的AlexNet、VGG、NIN等结构都通过增大网络深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失、梯度爆炸等。inception从另一种角度来提升训练结果:在相同的计算量下能提取到更多的特征,从而提升性能
- GoogLeNet 由Inception基础块组成
- Inception块相当于一个有4条子线路的小网络,它通过不同的filter卷积层和最大池化层来并行抽取信息,并使用1X1卷积层减少通道数从而降低模型复杂度.
- 可以自定义的超参数是每个层的输出通道数没我们以此来控制模型的复杂度.
- inception 经历了V1、V2、V3、V4 多个版本发展,不断调整完善
- inception V1 Block structure:
- 前面也介绍过1X1卷积核的作用:
- 为了减少维度,消除计算瓶颈
- 增加深度而不会降低性能
- 还用于修正线性激活函数,
- 还可以减少很多的可训练参数
GoogLeNet模型
- 完整模型结构
- GoogLeNet采用了可以重复堆叠使用的Inception Block 该做法,与前面介绍的VGG类似
- GoogLeNet采用GAP代替全连接层,与前面介绍的NIN模块的想法也类似
- 汲取前面模型的优点
- GoogLeNet网络结构细节表图:
- 输入原始图片尺寸224X224X3
- 上表中“#3x3 reduce”,“#5x5 reduce”表示在3x3,5x5卷积操作之前使用了1x1卷积的数量
- 其他的都可以看懂,就不解释了
- 下面还是老节目,上代码:
import sys
import torch