GoogLeNet网络结构详解与模型的搭建[通俗易懂]

GoogLeNet网络结构详解与模型的搭建[通俗易懂]首先给出三个链接:1.GoogLeNet网络结构详解视频2.使用pytorch搭建GoogLeNet网络并训练3.使用tensorflow搭建GoogLeNet网络并训练GoogLeNet在2014年由Google团队提出(与VGG网络同年,注意GoogLeNet中的L大写是为了致敬LeNet),斩获当年ImageNet竞赛中ClassificationTask(分…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

首先给出三个链接:

1. GoogLeNet网络结构详解视频

2. 使用pytorch搭建GoogLeNet网络并训练

3. 使用tensorflow搭建GoogLeNet网络并训练

 

GoogLeNet在2014年由Google团队提出(与VGG网络同年,注意GoogLeNet中的L大写是为了致敬LeNet),斩获当年ImageNet竞赛中Classification Task (分类任务) 第一名。原论文名称是《Going deeper with convolutions》,下面是该网络的缩略图,由于原论文提供的图太大,我将原图放在博文的最后。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

首先说说该网络中的亮点:

(1)引入了Inception结构(融合不同尺度的特征信息)

(2)使用1×1的卷积核进行降维以及映射处理 (虽然VGG网络中也有,但该论文介绍的更详细)

(3)添加两个辅助分类器帮助训练

(4)丢弃全连接层,使用平均池化层(大大减少模型参数,除去两个辅助分类器,网络大小只有vgg的1/20)

 

接着我们来分析一下Inception结构:

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

左图呢,是论文中提出的inception原始结构,右图是inception加上降维功能的结构。

先看左图,inception结构一共有4个分支,也就是说我们的输入的特征矩阵并行的通过这四个分支得到四个输出,然后在在将这四个输出在深度维度(channel维度)进行拼接得到我们的最终输出(注意,为了让四个分支的输出能够在深度方向进行拼接,必须保证四个分支输出的特征矩阵高度和宽度都相同)。

分支1是卷积核大小为1×1的卷积层,stride=1,

分支2是卷积核大小为3×3的卷积层,stride=1,padding=1(保证输出特征矩阵的高和宽和输入特征矩阵相等),

分支3是卷积核大小为5×5的卷积层,stride=1,padding=2(保证输出特征矩阵的高和宽和输入特征矩阵相等),

分支4是池化核大小为3×3的最大池化下采样,stride=1,padding=1(保证输出特征矩阵的高和宽和输入特征矩阵相等)。

 

再看右图,对比左图,就是在分支2,3,4上加入了卷积核大小为1×1的卷积层,目的是为了降维,减少模型训练参数,减少计算量,下面我们看看1×1的卷积核是如何减少训练模型参数的。同样是对一个深度为512的特征矩阵使用64个大小为5×5的卷积核进行卷积,不使用1×1卷积核进行降维话一共需要819200个参数,如果使用1×1卷积核进行降维一共需要50688个参数,明显少了很多。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

 

每个卷积层的卷积核个数如何确定呢,下面是原论文中给出的参数列表,对于我们搭建的Inception模块,所需要使用到参数有#1×1, #3x3reduce, #3×3, #5x5reduce, #5×5, poolproj,这6个参数,分别对应着所使用的卷积核个数。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

下面这幅图是我将Inception模块所使用到的参数信息标注在每个分支上,其中#1×1对应着分支1上1×1的卷积核个数,#3x3reduce对应着分支2上1×1的卷积核个数,#3×3对应着分支2上3×3的卷积核个数,#5x5reduce对应着分支3上1×1的卷积核个数,#5×5对应着分支3上5×5的卷积核个数,poolproj对应着分支4上1×1的卷积核个数。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

 

接着下来在看看辅助分类器结构,网络中的两个辅助分类器结构是一模一样的,如下图所示:

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

着两个辅助分类器的输入分别来自Inception(4a)和Inception(4d)。

辅助分类器的第一层是一个平均池化下采样层,池化核大小为5×5,stride=3

第二层是卷积层,卷积核大小为1×1,stride=1,卷积核个数是128

第三层是全连接层,节点个数是1024

第四层是全连接层,节点个数是1000(对应分类的类别个数)

 

关于模型的搭建与训练代码放在我的github中,大家可自行下载使用:

https://github.com/WZMIAOMIAO/deep-learning-for-image-processing

pytorch版本在pytorch_learning文件夹中,tensorflow版本在tensorflow_learning文件夹中.
 

最后给出我标注了部分信息的GoogLeNet网络结构图:

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170451.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • app漏洞检测方法有哪些_安卓app漏洞挖掘

    app漏洞检测方法有哪些_安卓app漏洞挖掘根据国内专业PP漏洞检测平台爱内测(www.detect.cn)介绍,目前关于APP漏洞检测有以下6种功能检测方法: 组件安全检测对四大组件和WebView的规范使用检测分析,发现因为程序中不规范使用导致的组件漏洞。 代码安全检测对dex和so库以及第三方加载库的代码的安全处理进行检测分析,发现代码被反编译和激活成功教程的漏洞。 内存安全检测检测APP运行过程中的内存处理和保护机制进行检测分析…

    2022年10月28日
  • keepalived+Nginx实现高可用主从集群

    keepalived+Nginx实现高可用主从集群

  • 在线客服系统源码(PHP完全开源版)

    在线客服系统源码(PHP完全开源版)在线客服系统软件使开发和运营团队能够高速协作,因此要求源码系统能够快速响应业务变化,并快速提供出色的客户和员工服务体验。  在线客服源码演示及获取:https://gitee.com/wang_li989/kfxt  客服沟通问题加起来会成为重大的财务损失。您的组织快速有效地解决这些问题的能力直接影响到未满足的SLA义务和客户体验,这两个方面对公司的成功至关重要。在线客服系统是企业战略的核心组成部分。通过减少识别和解决问题所需的时间,您的组织可以提高客户忠诚度,最大限度地延长正常运行时间,并提供始终如

  • python和java和c语言的区别-python c 和java的区别有哪些「建议收藏」

    python和java和c语言的区别-python c 和java的区别有哪些「建议收藏」一、pythonpython比较容易学习,语法很简单,融入了很多现代编程语言的特性。python的库非常丰富,可以迅速地开发程序,无论是网站还是小游戏都非常方便。不过,python的脚本的运行效率较低,不适合对运行效率要求较高的程序。Python是一种脚本语言。它更适合用来做算法。Python简单易学,对于新手来讲是编程入门的好选择。Python其实也是基于C++创造的,它们的区别主要体现在,C+…

  • 嵌入式学习计划

    嵌入式学习计划从今天开始,我要正式的学习关于嵌入式。初步的计划是,选择一款嵌入式Linux系统进行学习,目前选用的FreeRTOS设备,通过查询博客,阅读源码,看书方式进行全面的了解。其次,还要选择一款嵌入式设备进行实战,鉴于目前手头刚好有一台STM32F107VCT6,就选择它了,而且STM32F10x系列的设备资料也比较齐全。对于嵌入式设备的学习路线,首先学习使用固件库进行编程,学习的内容包括uart,flash,gpio等相关的内容,同时辅之以数字电子基础书籍进行更深入的了解。再都了解了之后,将FreeRT

  • jmeter登录返回数据给下一个接口_mysql读写分离实现

    jmeter登录返回数据给下一个接口_mysql读写分离实现问题描述场景是这样的,我们的支付系统在一笔支付完成后,需要发出通知给到商户。支付完成的消息通过消息队列发送给通知的服务。通知服务的有一部分处理逻辑是这样的:notifyPersist.saveNotifyRecord(notifyRecord);notifyRecord=rpNotifyService.getNotifyByMerchant…

    2022年10月13日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号