GoogLeNet学习总结

#参考文档:https://my.oschina.net/u/876354/blog/1637819#comments
https://panjinquan.blog.csdn.net/article/details/81560537
本文就最近学习的GoogLeNet进行总结,主要包括了其基本原理、模型构成、python代码实现、C语言代码简单实现、实战项目应用。
一、基本原理
一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式容易产生以下问题:
(1)参数太多,如果训练数据集有限,很容易产生过拟合;
(2)网络越大、参数越多,计算复杂度越大,难以应用;
(3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
所以设计团队通过使用Inception结构,既保证了参数数量不会过大,又可以增强网络表现。
在这里插入图片描述
该结构是由四路并行的操作组成的模块。由于其中5x5的参数数量过大,设计团队又改进该结构如下。在这里插入图片描述
可以看到在3x3、5x5之前增加了一层1x1的卷积层,目的是为了削减参数数量。下面举一个计算实例来说明这样做的好处。
比如,上一层的输出为150x150x128,经过具有256个通道的5x5卷积层之后(stride=1,pad=2),输出数据为150x150x256,其中,卷积层的参数为128x5x5x256= 819200。
而假如上一层输出先经过具有32个通道的1x1卷积层,输出数据为150x150x32。再经过具有256个输出的5x5卷积层,那么输出数据仍为为150x150x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 208896,大约减少了4倍。

二、网络模型构成
GoogLeNet实际上就是通过不断使用Inception模块,以及单层的卷积、池化实现了网络的组成。
在这里插入图片描述


三、代码实现
Python:可以将网络代码实现分解为几部分:首先构建一个用于实现卷积、归一化操作、激活函数的模块函数。目的是为了在构建Inception时使用这个函数实现每一路操作中的卷积。
在这里插入图片描述
接下来实现Inception模块
在这里插入图片描述
这四路的输出结果由一个前向传播函数进行打包相加。
在这里插入图片描述
最后实现整个网络的结构。
在这里插入图片描述
在这里插入图片描述
C语言:之前的学习总结中总结了使用C语言实现卷积池化操作。同上面Python的思路相同,可以先借由实现Inception结构进而实现整个网络的构建。通过编写随机矩阵函数,给予一个指定大小的初始输入矩阵。再将初始矩阵给予incep函数进行其他函数的调用,以实现网络。
在这里插入图片描述
四、实战项目
一个可以训练运行的计算机视觉项目,基本步骤可以分为制作数据集——划分训练集验证集——生成tfrecord文件——使用网络模型进行训练——使用测试函数进行测试并输出结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值