googlenet 订阅
GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失、梯度爆炸等。inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。 展开全文
GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失、梯度爆炸等。inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。
信息
类    型
神经网络
外文名
GoogLeNet
GoogLeNet核心思想
inception模块的基本机构如图一,整个inception结构就是由多个这样的inception模块串联起来的。inception结构的主要贡献有两个:一是使用1x1的卷积来进行升降维;二是在多个尺寸上同时进行卷积再聚合。 作用1:在相同尺寸的感受野中叠加更多的卷积,能提取到更丰富的特征。这个观点来自于Network in Network,图一里三个1x1卷积都起到了该作用。 图二左侧是是传统的卷积层结构(线性卷积),在一个尺度上只有一次卷积;右图是Network in Network结构(NIN结构),先进行一次普通的卷积(比如3x3),紧跟再进行一次1x1的卷积,对于某个像素点来说1x1卷积等效于该像素点在所有特征上进行一次全连接的计算,所以右侧图的1x1卷积画成了全连接层的形式,需要注意的是NIN结构中无论是第一个3x3卷积还是新增的1x1卷积,后面都紧跟着激活函数(比如relu)。将两个卷积串联,就能组合出更多的非线性特征。举个例子,假设第1个3x3卷积+激活函数近似于f1(x)=ax2+bx+c,第二个1x1卷积+激活函数近似于f2(x)=mx2+nx+q,那f1(x)和f2(f1(x))比哪个非线性更强,更能模拟非线性的特征?答案是显而易见的。NIN的结构和传统的神经网络中多层的结构有些类似,后者的多层是跨越了不同尺寸的感受野(通过层与层中间加pool层),从而在更高尺度上提取出特征;NIN结构是在同一个尺度上的多层(中间没有pool层),从而在相同的感受野范围能提取更强的非线性。作用2:使用1x1卷积进行降维,降低了计算复杂度。图二中间3x3卷积和5x5卷积前的1x1卷积都起到了这个作用。当某个卷积层输入的特征数较多,对这个输入进行卷积运算将产生巨大的计算量;如果对输入先进行降维,减少特征数后再做卷积计算量就会显著减少。图三是优化前后两种方案的乘法次数比较,同样是输入一组有192个特征、32x32大小,输出256组特征的数据,第一张图直接用3x3卷积实现,需要192x256x3x3x32x32=452984832次乘法;第二张图先用1x1的卷积降到96个特征,再用3x3卷积恢复出256组特征,需要192x96x1x1x32x32+96x256x3x3x32x32=245366784次乘法,使用1x1卷积降维的方法节省了一半的计算量。有人会问,用1x1卷积降到96个特征后特征数不就减少了么,会影响最后训练的效果么?答案是否定的,只要最后输出的特征数不变(256组),中间的降维类似于压缩的效果,并不影响最终训练的结果。 图二可以看到对输入做了4个分支,分别用不同尺寸的filter进行卷积或池化,最后再在特征维度上拼接到一起。这种全新的结构有什么好处呢?Szegedy从多个角度进行了解释:解释1:在直观感觉上在多个尺度上同时进行卷积,能提取到不同尺度的特征。特征更为丰富也意味着最后分类判断时更加准确。解释2:利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度。举个例子图四左侧是个稀疏矩阵(很多元素都为0,不均匀分布在矩阵中),和一个2x2的矩阵进行卷积,需要对稀疏矩阵中的每一个元素进行计算;如果像右图那样把稀疏矩阵分解成2个子密集矩阵,再和2x2矩阵进行卷积,稀疏矩阵中0较多的区域就可以不用计算,计算量就大大降低。这个原理应用到inception上就是要在特征维度上进行分解!传统的卷积层的输入数据只和一种尺度(比如3x3)的卷积核进行卷积,输出固定维度(比如256个特征)的数据,所有256个输出特征基本上是均匀分布在3x3尺度范围上,这可以理解成输出了一个稀疏分布的特征集;而inception模块在多个尺度上提取特征(比如1x1,3x3,5x5),输出的256个特征就不再是均匀分布,而是相关性强的特征聚集在一起(比如1x1的的96个特征聚集在一起,3x3的96个特征聚集在一起,5x5的64个特征聚集在一起),这可以理解成多个密集分布的子特征集。这样的特征集中因为相关性较强的特征聚集在了一起,不相关的非关键特征就被弱化,同样是输出256个特征,inception方法输出的特征“冗余”的信息较少。用这样的“纯”的特征集层层传递最后作为反向计算的输入,自然收敛的速度更快。 解释3:Hebbin赫布原理。Hebbin原理是神经科学上的一个理论,解释了在学习的过程中脑中的神经元所发生的变化,用一句话概括就是fire togethter, wire together。赫布认为“两个神经元或者神经元系统,如果总是同时兴奋,就会形成一种‘组合’,其中一个神经元的兴奋会促进另一个的兴奋”。比如狗看到肉会流口水,反复刺激后,脑中识别肉的神经元会和掌管唾液分泌的神经元会相互促进,“缠绕”在一起,以后再看到肉就会更快流出口水。用在inception结构中就是要把相关性强的特征汇聚到一起。这有点类似上面的解释2,把1x1,3x3,5x5的特征分开。因为训练收敛的最终目的就是要提取出独立的特征,所以预先把相关性强的特征汇聚,就能起到加速收敛的作用。在inception模块中有一个分支使用了max pooling,作者认为pooling也能起到提取特征的作用,所以也加入模块中。注意这个pooling的stride=1,pooling后没有减少数据的尺寸。 [1] 
收起全文
精华内容
下载资源
问答
  • GoogleNet

    2019-11-17 10:53:42
    GoogleNet

    GoogleNet



    一 论文导读

    一 LeNet 如下图:
    在这里插入图片描述
    LeNet 是整个卷积神经网络的开山之作,是卷积神经网络的现代雏形,1998年LeCun提出
    缺点是:网络层数浅,无激活层

    二 AlexNet
    在这里插入图片描述
    AlexNet:2012年在ImageNet竞赛中取得了冠军,这是ImageNet竞赛史上第一次基于卷积神经网络模型得到冠军,AlexNet相对于LeNet,网络更深,同时第一次引入ReLu激活层,在全连接层引入Dropout层防止过拟合。
    补充:Relu激活层标志着深度神经网络的出现

    当时限于GPU运算量有限,使用两个GPU并行运算。

    三 VGG

    在这里插入图片描述
    VggNet是第一个真正意义上的深层网络结构,是ImageNet2014年的亚军,使用了更小的滤波器,更深的网络结构

    VGGNet与AlexNetb比较:AlexNet只有8层,VGGNet有16-19层,AlexNet使用了1111卷积滤波器,VGGNet使用了33卷积滤波器和2*2的最大池化层,层叠小的滤波器和大的滤波器感受野是相同的,还能减少参数,因而有更深的网络。

    四 GoogleNet
    在这里插入图片描述
    GoogleNet也叫InceptionNet,是2014年ImageNet比赛的冠军,相比于VGGNet有更深的网络,但是网络参数却比AlexNet少12倍,计算效率非常高,因为GoogleNet采用了Inception模块,GoogleNet可以看作是很多个inception模块的串联,并且模型没有全连接。

    在这里插入图片描述
    Inception 模块设计了一种局部的网络拓扑结构,然后将这些模块堆叠在一起形成一个抽象的网络结构,运行及各个并行的滤波器,对输入进行卷积和池化,这些滤波器有着不同的感受野,最后将输出结果拼接在一起输出。

    最原始Inception的基本结构:
    在这里插入图片描述
    一方面增加了网络宽度,另一方面也增加了网络对尺度的适应性。
    网络卷积层中的网络能够提取输入的每一个细节信息,同时5*5的滤波器也能够覆盖大部分接受层的输入。还可以进行一个池化操作,以减少空间大小,降低多度拟合。在这些层之上,在每一个卷积层后都要做一个Relu操作,以增加网络的非线性特征。

    InceptionV2:
    在这里插入图片描述
    Inception原始版本,所有的卷积核都在上一层的所有输出上来做,而5*5的卷积核所需的计算量很大,造成特征图的厚度很大,为了避免这种情况,在3*3前,5*5前、max pooling后分别加上1*1的卷积核,已起到了降低特征图厚度的作用,这也就形成了Inception V1的网络结构。

    InceptionV3:在不改变感受野同时减少参数的情况下,采用1*nn*1的卷积核代替InceptionV1-V2中的n*n的卷积核。

    在这里插入图片描述

    在这里插入图片描述

    InceptionV4:

    在这里插入图片描述
    InceptionV4采用了inception模块于残差连接相结合,V4主要利用残差连接来改进V3结构,得到Inception-ResNet-V2,Inception-ResNet-V1的网络

    五 ResNet
    在这里插入图片描述
    在这里插入图片描述

    • ResNet是2015年ImageNet竞赛的冠军
    • ResNet有效地解决了深度神经网络难以训练的问题,可以训练高达1000层的卷积神经网络
    • ResNet通过引入了跨层链接解决了梯度回传消失的问题
    • 使用普通的连接,上层的梯度必须要一层一层传回来,而采用残差连接,相当于中间有了一条更短的路,梯度能够从这条更短的路传回来,避免了梯度过小的情况。

    论文的核心思想:

    1*1Conv

    -在

    二 论文精读

    三 代码实现


    在这里插入图片描述


    在这里插入图片描述


    '''GoogLeNet with PyTorch.'''
    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    
    # 卷积+bn+relu模块
    class BasicConv2d(nn.Module):
        def __init__(self, in_channels, out_channals, **kwargs):
            super(BasicConv2d, self).__init__()
            self.conv = nn.Conv2d(in_channels, out_channals, **kwargs)
            self.bn = nn.BatchNorm2d(out_channals)
    
        def forward(self, x):
            x = self.conv(x)
            x = self.bn(x)
            return F.relu(x)
    
    # Inception模块
    class Inception(nn.Module):
        def __init__(self, in_planes,
                     n1x1, n3x3red, n3x3, n5x5red, n5x5, pool_planes):
            super(Inception, self).__init__()
            # 1x1 conv branch
            self.b1 = BasicConv2d(in_planes, n1x1, kernel_size=1)
    
            # 1x1 conv -> 3x3 conv branch
            self.b2_1x1_a = BasicConv2d(in_planes, n3x3red,
                                        kernel_size=1)
            self.b2_3x3_b = BasicConv2d(n3x3red, n3x3,
                                        kernel_size=3, padding=1)
    
            # 1x1 conv -> 3x3 conv -> 3x3 conv branch
            self.b3_1x1_a = BasicConv2d(in_planes, n5x5red,
                                        kernel_size=1)
            self.b3_3x3_b = BasicConv2d(n5x5red, n5x5,
                                        kernel_size=3, padding=1)
            self.b3_3x3_c = BasicConv2d(n5x5, n5x5,
                                        kernel_size=3, padding=1)
    
            # 3x3 pool -> 1x1 conv branch
            self.b4_pool = nn.MaxPool2d(3, stride=1, padding=1)
            self.b4_1x1 = BasicConv2d(in_planes, pool_planes,
                                      kernel_size=1)
    
        def forward(self, x):
            y1 = self.b1(x)
            y2 = self.b2_3x3_b(self.b2_1x1_a(x))
            y3 = self.b3_3x3_c(self.b3_3x3_b(self.b3_1x1_a(x)))
            y4 = self.b4_1x1(self.b4_pool(x))
            # y的维度为[batch_size, out_channels, C_out,L_out]
            # 合并不同卷积下的特征图
            return torch.cat([y1, y2, y3, y4], 1)
    
    
    class GoogLeNet(nn.Module):
        def __init__(self):
            super(GoogLeNet, self).__init__()
            self.pre_layers = BasicConv2d(3, 192,
                                          kernel_size=3, padding=1)
    
            self.a3 = Inception(192,  64,  96, 128, 16, 32, 32)
            self.b3 = Inception(256, 128, 128, 192, 32, 96, 64)
    
            self.maxpool = nn.MaxPool2d(3, stride=2, padding=1)
    
            self.a4 = Inception(480, 192,  96, 208, 16,  48,  64)
            self.b4 = Inception(512, 160, 112, 224, 24,  64,  64)
            self.c4 = Inception(512, 128, 128, 256, 24,  64,  64)
            self.d4 = Inception(512, 112, 144, 288, 32,  64,  64)
            self.e4 = Inception(528, 256, 160, 320, 32, 128, 128)
    
            self.a5 = Inception(832, 256, 160, 320, 32, 128, 128)
            self.b5 = Inception(832, 384, 192, 384, 48, 128, 128)
    
            self.avgpool = nn.AvgPool2d(8, stride=1)
            self.linear = nn.Linear(1024, 5)
    
        def forward(self, x):
            out = self.pre_layers(x)
            out = self.a3(out)
            out = self.b3(out)
            out = self.maxpool(out)
            out = self.a4(out)
            out = self.b4(out)
            out = self.c4(out)
            out = self.d4(out)
            out = self.e4(out)
            out = self.maxpool(out)
            out = self.a5(out)
            out = self.b5(out)
            out = self.avgpool(out)
            out = out.view(out.size(0), -1)
            out = self.linear(out)
            return out
    
    
    

    四 问题思索

    展开全文
  • GoogLeNet

    2019-08-12 14:24:59
    GoogLeNet

    GoogLeNet

     

    展开全文
  • Googlenet

    2018-07-12 11:45:39
    神经网络就是搭积木 。Googlenet的历史:Googlenet和vgg100是同期出来的,参加了14年imagenet竞赛,Googlenet是第一名,vgg是第二。但是googlenet网络特别复杂;vgg网络简单有效。...

    • 神经网络就是搭积木 。
    • Googlenet的历史:
    • Googlenet和vgg100是同期出来的,参加了14年imagenet竞赛,Googlenet是第一名,vgg是第二。但是googlenet网络特别复杂;vgg网络简单有效。虽然vgg性能略微不太好,但最好改进的,都用这个。googlenet网络太复杂了,大家不会动这个进行改进。
    • googlenet v1版本是和vgg是同时期;v3、v4是和残差网络resnet同期;v2同期没有特别出名的网络。
    • 为了提升性能:减少参数,增加模型复杂度
    • 先在原模型基础上,减少参数,降低计算量,然后增加模型复杂度(增加宽度、深度

    • ----------------------------------------------------------------------------------------------------------------------------

    v1网络

























    展开全文
  • googleNet

    2016-05-13 09:55:10
    googleNet Are right-aligned
    googleNet
    这里写图片描述
    展开全文
  • GoogLenet

    万次阅读 2016-11-30 16:06:28
    GoogLenet想的就是能不能增加单层卷积层的宽度,即在单层卷积层上使用不同尺度的卷积核,GoogLenet构建了Inception module这个基本单元,基本的Inception module中有1x1卷积核,3x3卷积核,5x5卷积核还有一个3x3下...
  • googlenetGoogLeNet的回购
  • GoogLeNet文件

    2021-02-26 19:24:25
    GoogLeNet文件
  • GoogLeNet网络

    2021-02-24 20:04:57
    GoogLeNet
  • GoogLeNet系列解读

    万次阅读 多人点赞 2016-02-25 15:56:29
    本文介绍的是著名的网络结构GoogLeNet及其延伸版本,目的是试图领会其中的思想而不是单纯关注结构。GoogLeNet Incepetion V1 Motivation Architectural Details GoogLeNet Conclusion GoogLeNet Inception V2 ...
  • GoogLeNet.zip

    2021-03-16 13:05:43
    GoogLeNet.zip
  • googlenet.zip

    2020-05-07 21:47:02
    里面有bvlc_googlenet.caffemodel、bvlc_googlenet.protext、synset_words.txt 和使用视频

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,132
精华内容 4,452
关键字:

googlenet