Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >googlenet网络结构图_代码架构

googlenet网络结构图_代码架构

作者头像
全栈程序员站长
发布于 2022-09-21 02:41:14
发布于 2022-09-21 02:41:14
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

前言

七夕了,看着你们秀恩爱,单身狗的我还是做俺该做的事吧!

在上一篇文章中介绍了VGG网络结构,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而同年分类任务的第一名则是GoogleNet 。GoogleNet是Google研发的深度网络结构,之所以叫“GoogLeNet”,是为了向“LeNet”致敬,有兴趣的同学可以看下原文Going Deeper with Convolutions

与VGGNet模型相比较,GoogleNet模型的网络深度已经达到了22层( 如果只计算有参数的层,GoogleNet网络有22层深 ,算上池化层有27层),而且在网络架构中引入了Inception单元,从而进一步提升模型整体的性能。虽然深度达到了22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个( 5M ),VGG16参数是138M,是GoogleNet的27倍多,而VGG16参数量则是AlexNet的两倍多。

Inception单元结构

我们先来看一下模型中的Inception单元结构,然后在此基础上详细分析GoogleNet网络结构,这里推荐看一下我的这篇博客从Inception到Xception,卷积方式的成长之路,可以对下面的内容有更好的理解。

Inception 最初提出的版本主要思想是利用不同大小的卷积核实现不同尺度的感知,网络结构图如下:

Inception Module基本组成结构有四个成分。1*1卷积,3*3卷积,5*5卷积,3*3最大池化。最后对四个成分运算结果进行通道上组合,这就是Naive Inception的核心思想:利用不同大小的卷积核实现不同尺度的感知,最后进行融合,可以得到图像更好的表征。

下面通过一个具体的实例来看看整个Naive Inception单元的详细工作过程,假设在上图中Naive Inception单元的前一层输入的数据是一个32×32×256的特征图,该特征图先被复制成4份并分别被传至接下来的4个部分。我们假设这4个部分对应的滑动窗口的步长均为1,其中,1×1卷积层的Padding为0,滑动窗口维度为1×1×256,要求输出的特征图深度为128;3×3卷积层的Padding为1,滑动窗口维度为3×3×256,要求输出的特征图深度为192;5×5卷积层的Padding为2,滑动窗口维度为5×5×256,要求输出的特征图深度为96;3×3最大池化层的 Padding为1,滑动窗口维度为3×3×256。这里对每个卷积层要求输出的特征图深度没有特殊意义,仅仅举例用,之后通过计算,分别得到这4部分输出的特征图为32×32×128、32×32×192、32×32×96 和 32×32×256,最后在合并层进行合并,得到32×32×672的特征图,合并的方法是将各个部分输出的特征图相加,最后这个Naive Inception单元输出的特征图维度是32×32×672,总的参数量就是1*1*256*128+3*3*256*192+5*5*256*96=1089536

但是Naive Inception有两个非常严重的问题:首先,所有卷积层直接和前一层输入的数据对接,所以卷积层中的计算量会很大;其次,在这个单元中使用的最大池化层保留了输入数据的特征图的深度,所以在最后进行合并时,总的输出的特征图的深度只会增加,这样增加了该单元之后的网络结构的计算量。于是人们就要想办法减少参数量来减少计算量,在受到了模型 “Network in Network”的启发,开发出了在GoogleNet模型中使用的Inception单元(Inception V1),这种方法可以看做是一个额外的1*1卷积层再加上一个ReLU层。如下所示:

这里使用1×1 卷积核主要目的是进行压缩降维,减少参数量,从而让网络更深、更宽,更好的提取特征,这种思想也称为Pointwise Conv,简称PW。

举个例子来论证下吧。假设新增加的 1×1 的卷积的输出深度为64,步长为1,Padding为0,其他卷积和池化的输出深度、步长都和之前在Naive Inception单元中定义的一样(即上面例子中定义的一样),前一层输入的数据仍然使用同之前一样的维度为32×32×256的特征图,通过计算,分别得到这 4 部分输出的特征图维度为32×32×128、32×32×192、32×32×96 和32×32×64,将其合并后得到维度为32×32×480的特征图,将这4部分输出的特征图进行相加,最后Inception单元输出的特征图维度是32×32×480。新增加的3个 1×1 的卷积参数量是3*1*1*256*64=49152,原来的卷积核参数量是1*1*256*128+3*3*64*192+5*5*64*96=296960,总的参数量就是49152+296960=346112

在输出的结果中,32×32×128、32×32×192、32×32×96 和之前的Naive Inception 单元是一样的,但其实这三部分因为1×1卷积层的加入,总的卷积参数数量已经大大低于之前的Naive Inception单元而且因为在最大池化层之前也加入了1×1的卷积层,所以最终输出的特征图的深度也降低了,这样也降低了该单元之后的网络结构的计算量

GoogLeNet模型解读

GoogleNet网络结构(Inception V1)的网络结构如下:

GoogLeNet网络有22层深(包括pool层,有27层深),在分类器之前,采用Network in Network中用Averagepool(平均池化)来代替全连接层的思想,而在avg pool之后,还是添加了一个全连接层,是为了大家做finetune(微调)。而无论是VGG还是LeNet、AlexNet,在输出层方面均是采用连续三个全连接层,全连接层的输入是前面卷积层的输出经过reshape得到。据发现,GoogLeNet将fully-connected layer用avg pooling layer代替后,top-1 accuracy 提高了大约0.6%;然而即使在去除了fully-connected layer后,依然必须dropout。

由于全连接网络参数多,计算量大,容易过拟合,所以GoogLeNet没有采用VGG、LeNet、AlexNet三层全连接结构,直接在Inception模块之后使用Average Pool和Dropout方法,不仅起到降维作用,还在一定程度上防止过拟合。

在Dropout层之前添加了一个7×7的Average Pool,一方面是降维,另一方面也是对低层特征的组合。我们希望网络在高层可以抽象出图像全局的特征,那么应该在网络的高层增加卷积核的大小或者增加池化区域的大小,GoogLeNet将这种操作放到了最后的池化过程,前面的Inception模块中卷积核大小都是固定的,而且比较小,主要是为了卷积时的计算方便。

GoogLeNet在网络模型方面与AlexNet、VGG还是有一些相通之处的,它们的主要相通之处就体现在卷积部分,

  • AlexNet采用5个卷积层
  • VGG把5个卷积层替换成5个卷积块
  • GoogLeNet采用5个不同的模块组成主体卷积部分

用表格的形式表示GoogLeNet的网络结构如下所示:

上述就是GoogLeNet的结构,可以看出,和AlexNet统一使用5个卷积层、VGG统一使用5个卷积块不同,GoogLeNet在主体卷积部分是卷积层与Inception块混合使用。另外,需要注意一下,在输出层GoogleNet采用全局平均池化,得到的是高和宽均为1的卷积层,而不是通过reshape得到的全连接层。

需要注意的是,上图中 “#3×3reduce” 和 “#5×5reduce” 表示在3×3和5×5卷积之前,使用的降维层中的1×1滤波器的数量。pool proj代表max-pooling后的投影数量(即先max-pooling,再PW降维),所有的reductions(降维)和projections(投影)也都使用激活函数ReLU。

下面就来详细介绍一下GoogLeNet的模型结构。

输入

原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)

第一模块

第一模块采用的是一个单纯的卷积层紧跟一个最大池化层。

卷积层:卷积核大小7*7,步长为2,padding为3,输出通道数64,输出特征图尺寸为(224-7+3*2)/2+1=112.5(向下取整)=112,输出特征图维度为112x112x64,卷积后进行ReLU操作。

池化层:窗口大小3*3,步长为2,输出特征图尺寸为((112 -3)/2)+1=55.5(向上取整)=56,输出特征图维度为56x56x64。

关于卷积和池化中的特征图大小计算方式,可以参考我的博客神经网络之多维卷积的那些事

第二模块

第二模块采用2个卷积层,后面跟一个最大池化层。

卷积层:

  1. 先用64个1×1的卷积核(3×3卷积核之前的降维)将输入的特征图(56x56x64)变为56x56x64,然后进行ReLU操作。参数量是1*1*64*64=4096
  2. 再用卷积核大小3*3,步长为1,padding为1,输出通道数192,进行卷积运算,输出特征图尺寸为(56-3+1*2)/1+1=56,输出特征图维度为56x56x192,然后进行ReLU操作。参数量是3*3*64*192=110592

第二模块卷积运算总的参数量是110592+4096=114688,即114688/1024=112K

池化层: 窗口大小3*3,步长为2,输出通道数192,输出为((56 - 3)/2)+1=27.5(向上取整)=28,输出特征图维度为28x28x192。

第三模块(Inception 3a层)

Inception 3a层,分为四个分支,采用不同尺度,图示如下:

再看下表格结构,来分析和计算吧:

  1. 使用64个1×1的卷积核,运算后特征图输出为28x28x64,然后RuLU操作。参数量1*1*192*64=12288
  2. 96个1×1的卷积核(3×3卷积核之前的降维)运算后特征图输出为28x28x96,进行ReLU计算,再进行128个3×3的卷积,输出28x28x128。参数量1*1*192*96+3*3*96*128=129024
  3. 16个1×1的卷积核(5×5卷积核之前的降维)将特征图变成28x28x16,进行ReLU计算,再进行32个5×5的卷积,输出28x28x32。参数量1*1*192*16+5*5*16*32=15872
  4. pool层,使用3×3的核,输出28x28x192,然后进行32个1×1的卷积,输出28x28x32.。总参数量1*1*192*32=6144

将四个结果进行连接,对这四部分输出结果的第三维并联,即64+128+32+32=256,最终输出28x28x256。总的参数量是12288+129024+15872+6144=163328,即163328/1024=159.5K,约等于159K。

第三模块(Inception 3b层)

Inception 3b层,分为四个分支,采用不同尺度。

  1. 128个1×1的卷积核,然后RuLU,输出28x28x128
  2. 128个1×1的卷积核(3×3卷积核之前的降维)变成28x28x128,进行ReLU,再进行192个3×3的卷积,输出28x28x192
  3. 32个1×1的卷积核(5×5卷积核之前的降维)变成28x28x32,进行ReLU,再进行96个5×5的卷积,输出28x28x96
  4. pool层,使用3×3的核,输出28x28x256,然后进行64个1×1的卷积,输出28x28x64

将四个结果进行连接,对这四部分输出结果的第三维并联,即128+192+96+64=480,最终输出输出为28x28x480。

第四模块(Inception 4a、4b、4c、4e)

与Inception3a,3b类似

第五模块(Inception 5a、5b)

与Inception3a,3b类似

输出层

前面已经多次提到,在输出层GoogLeNet与AlexNet、VGG采用3个连续的全连接层不同,GoogLeNet采用的是全局平均池化层,得到的是高和宽均为1的卷积层,然后添加丢弃概率为40%的Dropout,输出层激活函数采用的是softmax。

激活函数

GoogLeNet每层使用的激活函数为ReLU激活函数。

辅助分类器

根据实验数据,发现神经网络的中间层也具有很强的识别能力,为了利用中间层抽象的特征,在某些中间层中添加含有多层的分类器。如下图所示,红色边框内部代表添加的辅助分类器。GoogLeNet中共增加了两个辅助的softmax分支,作用有两点,一是为了避免梯度消失,用于向前传导梯度。反向传播时如果有一层求导为0,链式求导结果则为0。二是将中间某一层输出用作分类,起到模型融合作用。最后的loss=loss_2 + 0.3 * loss_1 + 0.3 * loss_0。实际测试时,这两个辅助softmax分支会被去掉。

GoogLeNet其他版本

上面介绍的GoogLeNet模型是Inception v1版本,还有Inception v2,v3,v4版本

Inception V2

  1. 学习VGGNet的特点,用两个33卷积代替55卷积,可以降低参数量。
  2. 提出BN算法。BN算法是一个正则化方法,可以提高大网络的收敛速度。就是每一batch的输入分布标准化处理,使得规范化为N(0,1)的高斯分布,收敛速度大大提高。详情可以参考我的博客Batch Normalization:批量归一化详解

Inception V3

学习Factorization into small convolutions的思想,在Inception V2的基础上,将一个二维卷积拆分成两个较小卷积,例如将7*7卷积拆成1*7卷积和7*1卷积,这样做的好处是降低参数量。该paper中指出,通过这种非对称的卷积拆分比对称的拆分为几个相同的小卷积效果更好,可以处理更多,更丰富的空间特征,这就是Inception V3网络结构。

Inception V4

借鉴了微软的ResNet网络结构思想,后面写到Resnet再介绍吧。

GoogLeNet测试样本处理

  1. 对于一个测试样本,将图像的短边缩放成4种尺寸,分别为256,288,320,352。
  2. 从每种尺寸的图像的左边,中间,右边(或者上面,中间,下面)分别截取一个方形区域,共三块方形区域。
  3. 对于每一个方形区域,我们取其四角和中心,裁切出5个区域,再将方形区域缩小到224×224,共6快区域,加上它们的镜像版本(将图像水平翻转),一共得到4×3×6×2=144张图像。这样的方法在实际应用中是不必要的,可能存在更合理的修剪方法。下图展示了不同修剪方法和不同模型数量的组合结果:

上表中,通过改变模型数量以及切分数量,展示几种测试策略对于图片进行预测的效果,所有数据报告基于验证数据集,以避免测试集上的过拟合。

使用多个模型时,每个模型的Softmax分类器在多个修剪图片作为输入时都得到多个输出值,然后再对所有分类器的softmax概率值求平均。

效果如下所示:

可以看到,GoogLeNet在验证集和测试集上top-5的错误率都降到了6.67%,在当年参赛者中排名第一。

GoogleNet代码实现

Inception实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
from torch import nn, optim
import torch.nn.functional as F
class Inception(nn.Module):
    # c1 - c4为每条线路里的层的输出通道数
    def __init__(self, in_c, c1, c2, c3, c4):
        super(Inception, self).__init__()
        # 线路1,单1 x 1卷积层
        self.p1_1 = nn.Conv2d(in_c, c1, kernel_size=1)
        # 线路21 x 1卷积层后接3 x 3卷积层
        self.p2_1 = nn.Conv2d(in_c, c2[0], kernel_size=1)
        self.p2_2 = nn.Conv2d(c2[0], c2[1], kernel_size=3, padding=1)
        # 线路31 x 1卷积层后接5 x 5卷积层
        self.p3_1 = nn.Conv2d(in_c, c3[0], kernel_size=1)
        self.p3_2 = nn.Conv2d(c3[0], c3[1], kernel_size=5, padding=2)
        # 线路43 x 3最大池化层后接1 x 1卷积层
        self.p4_1 = nn.MaxPool2d(kernel_size=3, stride=1, padding=1)
        self.p4_2 = nn.Conv2d(in_c, c4, kernel_size=1)
 
    def forward(self, x):
        p1 = F.relu(self.p1_1(x))
        p2 = F.relu(self.p2_2(F.relu(self.p2_1(x))))
        p3 = F.relu(self.p3_2(F.relu(self.p3_1(x))))
        p4 = F.relu(self.p4_2(self.p4_1(x)))
        return torch.cat((p1, p2, p3, p4), dim=1)  # 在通道维上连结输出

GlobalAvgPool2d与FlattenLayer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class GlobalAvgPool2d(nn.Module):
    # 全局平均池化层可通过将池化窗口形状设置成输入的高和宽实现
    def __init__(self):
        super(GlobalAvgPool2d, self).__init__()
    def forward(self, x):
        return F.avg_pool2d(x, kernel_size=x.size()[2:])
    
class FlattenLayer(torch.nn.Module):
    def __init__(self):
        super(FlattenLayer, self).__init__()
    def forward(self, x): # x shape: (batch, *, *, ...)
        return x.view(x.shape[0], -1)

GoogLeNet实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class GoogLeNet(nn.Module):
    def __init__(self, num_classes=1000):
        super(GoogLeNet, self).__init__()
        
        self.b1 = nn.Sequential(nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3),
                           nn.ReLU(),
                           nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

        self.b2 = nn.Sequential(nn.Conv2d(64, 64, kernel_size=1),
                           nn.Conv2d(64, 192, kernel_size=3, padding=1),
                           nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

        self.b3 = nn.Sequential(Inception(192, 64, (96, 128), (16, 32), 32),
                           Inception(256, 128, (128, 192), (32, 96), 64),
                           nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

        self.b4 = nn.Sequential(Inception(480, 192, (96, 208), (16, 48), 64),
                           Inception(512, 160, (112, 224), (24, 64), 64),
                           Inception(512, 128, (128, 256), (24, 64), 64),
                           Inception(512, 112, (144, 288), (32, 64), 64),
                           Inception(528, 256, (160, 320), (32, 128), 128),
                           nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

        self.b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128),
                           Inception(832, 384, (192, 384), (48, 128), 128),
                           GlobalAvgPool2d())
        self.output=nn.Sequential(FlattenLayer(),
                                  nn.Dropout(p=0.4),
                                  nn.Linear(1024, 1000))
        
        def forward(self, x):
            x=b1(x)
            x=b2(x)
            x=b3(x)
            x=b4(x)
            x=b5(x)
            x=output(x)
            return x

测试输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
net = GoogLeNet()
X = torch.rand(1, 3, 224, 224)
# 可以对照表格看一下各层输出的尺寸
for blk in net.children(): 
    X = blk(X)
    print('output shape: ', X.shape)
""" # 输出: output shape: torch.Size([1, 64, 56, 56]) output shape: torch.Size([1, 192, 28, 28]) output shape: torch.Size([1, 480, 14, 14]) output shape: torch.Size([1, 832, 7, 7]) output shape: torch.Size([1, 1024, 1, 1]) output shape: torch.Size([1, 1000]) """

【参考文档】

  1. GoogLeNet中的inception结构,你看懂了吗
  2. GoogleNet 论文解析及代码实现
  3. 带你快速学会 GoogLeNet 神经网络
  4. 卷积神经网络之GoogLeNet
  5. GoogLeNet学习笔记
  6. GoogLeNet模型
  7. 深度学习之pytorch计算机视觉-唐进民著
  8. Going Deeper with Convolutions, CVPR 2014

我把GoogLeNet的论文上传到百度云上了,有需要请自提,链接:https://pan.baidu.com/s/1Tcg6-s1pHCE2WZ9TBaQ90A 提取码:ivft

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170437.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
经典神经网络 | GoogleNet 论文解析及代码实现
利用赫布理论和多尺度处理直觉设计一种增加深度和宽度的提高内部计算资源利用率的(同时保持了计算预算不变)网络。GoogleNet在ImageNet分类比赛的Top-5错误率降到了6.7%。
墨明棋妙27
2022/09/23
4230
【现代深度学习技术】现代卷积神经网络04:含并行连接的网络(GoogLeNet)
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/03/29
1150
【现代深度学习技术】现代卷积神经网络04:含并行连接的网络(GoogLeNet)
卷积神经网络的网络结构_典型卷积神经网络结构
GoogLeNet原文地址:Going Deeper with Convolutions:https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Szegedy_Going_Deeper_With_2015_CVPR_paper.pdf
全栈程序员站长
2022/09/21
5660
卷积神经网络的网络结构_典型卷积神经网络结构
「卷积神经网络」深入浅出
六月份初开启了我神经网络相关内容的学习,眨眼间一个月过去了,是时候来总结下自己这个月的学习心得了。
曼亚灿
2023/07/24
7700
「卷积神经网络」深入浅出
从零开始学Pytorch(八)之Modern CNN
LeNet: 在大的真实数据集上的表现并不尽如⼈意。 1.神经网络计算复杂。 2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域。
墨明棋妙27
2022/09/23
2800
googlenet 复现
googlenet是2014年ilsvrc冠军,一共22层。这个网络中,作者使用了新的inception模块来进行多尺度信息融合,让神经网络变得更宽。同时googlenet比他的前辈alexnet相比,在精度大大提升的同时,参数数量大大减少(是alexnet的1/12),使得网络更加精简部署在移动设备上成为可能。 经过试验,googlenet保持一次推理只运行15亿次(乘法、加法)计算的常量。这样在实际生产中,googlenet也具有极大价值。
用户7680342
2020/11/17
5390
卷积神经网络及经典模型
虽然图片识别对于人来说是一件轻松的事情,但是对于计算机来说,由于接受的是一串数字,对于同一个物体,表示这个物体的数字可能会有很大的不同,所以使用算法来实现这一任务还是有很多挑战的,具体来说:
Here_SDUT
2022/09/19
4.5K0
卷积神经网络及经典模型
卷积神经网络——中篇【深度学习】【PyTorch】
全连接层是网络里参数比重最高的地方(参数=输入通道*高*宽*输出通道*高*宽),尤其是卷积后的第一个全连接层。而卷积层参数就小得多。所以用卷积层替代全连接层,参数会更少。
来杯Sherry
2023/08/24
3410
卷积神经网络——中篇【深度学习】【PyTorch】
深度学习(GoogLeNet)
本篇文章采用百度paddlepaddle深度学习框架,并在百度Ai Studio平台上运行。
全栈程序员站长
2022/09/21
6600
深度学习(GoogLeNet)
深入浅出卷积神经网络及实现!
卷积神经网络CNN是深度学习中的基础知识。本文对CNN的基础原理及常见的CNN网络进行了详细解读,并介绍了Pytorch构建深度网络的流程。最后,以阿里天池零基础入门CV赛事为学习实践,对Pytorch构建CNN模型进行实现。
Datawhale
2020/06/16
9730
【长文详解】卷积神经网络常见架构AlexNet、ZFNet、VGGNet、GoogleNet和ResNet模型的理论与实践
目前的常见的卷积网络结构有AlexNet、ZF Net、VGGNet、Inception、ResNet等等,接下来我们对这些架构一一详解。
zenRRan
2018/10/09
2.2K0
【长文详解】卷积神经网络常见架构AlexNet、ZFNet、VGGNet、GoogleNet和ResNet模型的理论与实践
图像处理经典网络
GoogLeNet 引入了并行连结的网络结构,其基础卷积块称为 Inception 块,其结构如下:
hotarugali
2022/03/11
3.3K0
图像处理经典网络
【卷积神经网络结构专题】经典网络结构之VGG(附代码实现)
VGG 最大的特点就是它在之前的网络模型上,通过比较彻底地采用 3x3 尺寸的卷积核来堆叠神经网络,从而加深整个神经网络的层级。并且VGG论文给出了一个非常振奋人心的结论:卷积神经网络的深度增加和小卷积核的使用对网络的最终分类识别效果有很大的作用。
深度学习技术前沿公众号博主
2020/06/04
2.3K0
深度学习经典网络解析:6.GoogLeNet
  GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如过拟合、梯度消失、梯度爆炸等。Inception Architecture的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。
AiCharm
2023/05/15
7800
深度学习经典网络解析:6.GoogLeNet
CNN基础 & CV基本应用
直接上代码,kaiming初始化真的猛。与LeNet相比,这里的主要变化是使用更小的学习速率训练,这是因为网络更深更广、图像分辨率更高,训练卷积神经网络就更昂贵。
Sarlren
2022/10/28
4440
CNN基础 & CV基本应用
Inception这么多网络之Inception v1
卷积层来改变通道数。四条路径都使用了合适的填充来使输入与输出的高和宽一致。即假设输入图像为
灿视学长
2021/05/28
8300
【深入解析Inception网络:从V1到V3的理论演进与对比,包含pytorch实现Inception模块的代码】
在深度学习领域,卷积神经网络(CNN)通过堆叠卷积层提取图像特征,但传统架构存在两个核心问题:
机器学习司猫白
2025/03/10
4770
【深入解析Inception网络:从V1到V3的理论演进与对比,包含pytorch实现Inception模块的代码】
一文总览CNN网络架构演进:从LeNet到DenseNet
卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀。CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF Net到VGG,GoogLeNet再到ResNet和最近的DenseNet,网络越来越深,架构越来越复杂,解决反向传播时梯度消失的方法也越来越巧妙。新年有假期,就好好总结一波CNN的各种经典架构吧,领略一下CNN的发展历程中各路大神之间的智慧碰撞之美。
小草AI
2019/05/29
9240
什么是GoogleNet?什么是Inception?GoogleNet结构详解(2014年)
googleNet是2014年的ILSVRC的冠军模型,GoogleNet做了更大胆的网络上的尝试,而不是像vgg继承了lenet以及alexnet的一切框架。GoogleNet虽然有22层,但是参数量只有AlexNet的1/12。
机器学习炼丹术
2020/07/14
1.9K0
什么是GoogleNet?什么是Inception?GoogleNet结构详解(2014年)
深度学习卷积神经网络——经典网络GoogLeNet(Inception V3)网络的搭建与实现
获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),
全栈程序员站长
2022/09/21
5.7K0
深度学习卷积神经网络——经典网络GoogLeNet(Inception V3)网络的搭建与实现
推荐阅读
相关推荐
经典神经网络 | GoogleNet 论文解析及代码实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验