精华内容
下载资源
问答
  • 理解为什么要将全连接层转化为卷积层1.全连接层可以视作一种特殊的卷积考虑下面两种情况:特征图和全连接层相连,AlexNet经过五次池化后得到7*7*512的特征图,下一层全连接连向4096神经元,这过程可以看做有4096...

    理解为什么要将全连接层转化为卷积层

    1.全连接层可以视作一种特殊的卷积

    考虑下面两种情况:

    特征图和全连接层相连,AlexNet经过五次池化后得到7*7*512的特征图,下一层全连接连向4096个神经元,这个过程可以看做有4096个7*7*512的卷积核和7*7*512的特征图进行卷积操作,最终得到1*1*4096的特征图,等价与全连接得到4096个神经元。

    全连接层和全连接层相连,AlexNet的再下一层依然是4096个神经元,即4096个神经元和4096个神经元全连接,由(1)我们得到了1*1*4096的特征图,本次全连接过程可以看做存在4096个1*1*4096个卷积核,依次和1*1*4096的特征图进行卷积操作,等价与全连接。

    2.网络改成全卷积形式后在某些场景可以提升效率

    CS231课程中有如下陈述: 实际操作中,每次这样的变换都需要把全连接层的权重W重塑成卷积层的滤波器。那么这样的转化有什么作用呢?它在下面的情况下可以更高效:让卷积网络在一张更大的输入图片上滑动(译者注:即把一张更大的图片的不同区域都分别带入到卷积网络,得到每个区域的得分),得到多个输出,这样的转化可以让我们在单个向前传播的过程中完成上述的操作。

    举个例子,如果我们想让224x224尺寸的浮窗,以步长为32在384x384的图片上滑动,把每个经停的位置都带入卷积网络,最后得到6x6个位置的类别得分。上述的把全连接层转换成卷积层的做法会更简便。如果224x224的输入图片经过卷积层和汇聚层之后得到了[7x7x512]的数组,那么,384x384的大图片直接经过同样的卷积层和汇聚层之后会得到[12x12x512]的数组(因为途径5个汇聚层,尺寸变为384/2/2/2/2/2 = 12)。然后再经过上面由3个全连接层转化得到的3个卷积层,最终得到[6x6x1000]的输出(因为(12 - 7)/1 + 1 = 6)。这个结果正是浮窗在原图经停的6x6个位置的得分!

    面对384x384的图像,让(含全连接层)的初始卷积神经网络以32像素的步长独立对图像中的224x224块进行多次评价,其效果和使用把全连接层变换为卷积层后的卷积神经网络进行一次前向传播是一样的。自然,相较于使用被转化前的原始卷积神经网络对所有36个位置进行迭代计算,使用转化后的卷积神经网络进行一次前向传播计算要高效得多,因为36次计算都在共享计算资源。这一技巧在实践中经常使用,一次来获得更好的结果。比如,通常将一张图像尺寸变得更大,然后使用变换后的卷积神经网络来对空间上很多不同位置进行评价得到分类评分,然后在求这些分值的平均值。

    上面给出了转化为全卷积的两个理由,一是不用限制死输入图像的大小,提供方便。二是前向传播时效率更高。

    我的理解与推理

    首先解释方便,对于384*384的图片,不修改AlexNet的结构使之适应384*384(依然使用原来224x224输入的结构),直到经过汇聚层得到[12x12x512]的数组时,网络运行没有任何问题,按照原来的架构,接下来要将特征图平铺和4096个神经元全连接,这时候就出问题了,因为原架构平铺后是7x7,现在是12x12,无法使用之前的参数矩阵了,但是将全连接层转化为卷积层后可继续进行,并最终得到6x6的正确输出,仅仅将网络的全连接层等价转化为卷积层,就能接收更大的图片,这显然方便了很多。

    然后解释高效,第一层卷积,对于224x224的一张图片,假设卷积耗时为t,那么前向传播时,36张图片的时间为36t,对于384x384的图片,耗时同样为6*6*t = 36t,假设下一层为池化层,每次2x2池化的时间为ti,对于36张224x224的图片,总耗时36*112*112*ti = 451584ti,对于384x384的图片,耗时为192*192*ti = 36864ti << 451584ti,类似进行计算下去,发现全卷积每一层的耗时都少的多。因此全卷积效率更高,直观上如何得到这个结论呢?将384x384的图片按照32的步长切成224x224后得到36张图片,这36张图片有很多区域重叠了,本来一次池化就可以得到结果的,但是输入36张图片后,相同区域进行了多次重复池化操作,因此耗费了更多的时间。

    展开全文
  • 全连接神经网络中使用全连接层,在全连接层中,相邻层的神经元全部连接在一起,输出的数量可以任意指定. 全连接层存在什么问题呢?那就是数据的形状被忽视了,比如,输入数据是图像是,图像通常是长,宽,通道方向上的高...

    全连接神经网络中使用了全连接层,在全连接层中,相邻层的神经元全部连接在一起,输出的数量可以任意指定.

    全连接层存在什么问题呢?那就是数据的形状被忽视了,比如,输入数据是图像是,图像通常是长,宽,通道方向上的高三维形状,但是,在向全连接层输入时,需要将三维数据拉平为1维数据,比如下面的的网络:

    输入图像是1通道,长,宽均为28像素的形状,但是却被排列成了1列,784个数据的形式输入到最开始的网络层.

    图像是三维形状,这个形状中应该含有重要的空间信息,比如,空间上临近的像素为相似的值,RGB的各个通道之间分别有密切的关联性,相距较远的像素之间没有什么关联等,3维形状中可能隐藏有值得提取的本质模式,但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息.

    而卷积层可以保持形状不变,当输入数据是图像时,卷积层会以三维的数据形式接受输入数据,并且同样以3维数据的形式输至下一层,因此,在CNN中,可以正确理解具有形状的数据.

    如下图:

     

    不但可以保留形状信息,而且会有效减小参数数量和链接数量,全连接的情况下,需要16*4=64个参数,但是经过卷积处理后,只需要9个参数需要学习,其它都为0.

    卷积核和上一层的关系可以用下面的网络图来表示,注意局部连接和权值共享,每个输出像素都是3*3的连接,需要9个参数,而非卷积需要的4*4个连接,16个参数。另一方面降低了模型的复杂度,也就减小了过拟合的风险。

    可以看到,在不加padding的情况下,输入图像边缘的四个像素只有一个连接.

    这里说明一下为什么要引入卷积运算,尽管前面的矩阵乘法其实已经可以解决很多问题了,但是一旦到了图像领域,对一个 1920*1080 的图像做乘法,就是一个 [1, 2,073,600] 的列向量了,这个运算量已经不算小了,而用卷积操作,计算量就会大大缩减;另一方面,如果把一个二维的图像压缩成一个一维的向量,其实就丢失了像素点在上下左右方向相互关联的信息,例如一个像素点和周围的颜色通常比较相近,这些信息很多时候是很重要的图像信息。


    结束! 

    展开全文
  • 神经网络:全连接层

    千次阅读 2021-02-06 17:22:36
    (所以和特征图尺寸一样大小的卷积核做卷积,提取全图范围特征,和接全连接层,计算过程是等效的,输入输出,参数量完全一样) 全连接之所以失宠: 有人说是参数量大的原因。其实如果特征图压缩的足够小再做全连接...

    问题汇总简答(持续更新):

    (1)全连接层对模型的影响?

    首先我们明白全连接层的组成如下:

    二层全连接层结构

    那么全连接层对模型影响参数就是三个:

    1. 全接解层的总层数(长度)
    2. 单个全连接层的神经元数(宽度)
    3. 激活函数

    首先我们要明白激活函数的作用是:

    增加模型的非线性表达能力

    更详细了解请去:

    蒋竺波:CNN入门讲解:什么是激活函数(Activation Function)​zhuanlan.zhihu.com图标

     

    如果全连接层宽度不变,增加长度:

    优点:神经元个数增加,模型复杂度提升;全连接层数加深,模型非线性表达能力提高。理论上都可以提高模型的学习能力。

    如果全连接层长度不变,增加宽度:

    优点:神经元个数增加,模型复杂度提升。理论上可以提高模型的学习能力。

    难度长度和宽度都是越多越好?

    肯定不是

    (1)缺点:学习能力太好容易造成过拟合。

    (2)缺点:运算时间增加,效率变低。

    那么怎么判断模型学习能力如何?

    看Training Curve 以及 Validation Curve,在其他条件理想的情况下,如果Training Accuracy 高, Validation Accuracy 低,也就是过拟合 了,可以尝试去减少层数或者参数。如果Training Accuracy 低,说明模型学的不好,可以尝试增加参数或者层数。至于是增加长度和宽度,这个又要根据实际情况来考虑了。

    PS:很多时候我们设计一个网络模型,不光考虑准确率,也常常得在Accuracy/Efficiency 里寻找一个好的平衡点。

    -------------------

     

    全连接层:

    全连接层一般会放在网络的最后,作用是用来综合所有信息。对于cnn它提取特征的范围是全图的,直接把图像降维成一堆序列。

    卷积层是一种局部连接,它所能提取的特征的范围,取决于卷积核的感受野,当卷积核感受野覆盖到全图的时候,它的作用就和全连接层类似了。(所以用和特征图尺寸一样大小的卷积核做卷积,提取全图范围特征,和接全连接层,计算过程是等效的,输入输出,参数量完全一样)

    全连接之所以失宠:

    有人说是参数量大的原因。其实如果特征图压缩的足够小再做全连接,参数量和计算量也是不算大的。

    我觉得主要原因还是,目前大多数的任务,如目标检测,或是分割,并不要求提取全图特征,只需要提取能够覆盖目标物体的大小的感受野内特征即可。尤其是小物体检测问题,感受野很小即可,如果还去接全连接提取全图特征,我们待检测的目标会被淹没在和其它背景的平均特征之中变得不可识别。

    全卷积还有一个很大的优点:

    不再要求输入尺寸为固定尺寸,只要求输入图片不太小到被网络下采样到尺寸不够用就行。

    输入图像正好被下采样到1*1,那就是和接全连接一样的效果;下采样后大于1*1,也完全不影响网络的计算过程。

    全连接的那种计算形式就不能做到这么通用,所以可以完全被全卷积形式替换。

    作者:炫云
    链接:https://zhuanlan.zhihu.com/p/136786896
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    激活函数(Activation Function),假设我们经过一个Relu之后的输出如下

    Relu:

    然后开始到达全连接层

    全连接层

    以上图为例,我们仔细看上图全连接层的结构,全连接层中的每一层是由许多神经元组成的(1x 4096)的平铺结构,上图不明显,我们看下图

    它是怎么样把3x3x5的输出,转换成1x4096的形式?

    很简单,可以理解为在中间做了一个卷积

    从上图我们可以看出,我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值

    因为我们有4096个神经元

    我们实际就是用一个3x3x5x4096的卷积层去卷积激活函数的输出


    全连接层有两层1x4096fully connected layer平铺结构(有些网络结构有一层的,或者二层以上的)

    但是大部分是两层以上,泰勒公式都知道吧,意思就是用多项式函数去拟合光滑函数,我们这里的全连接层中一层的一个神经元就可以看成一个多项式,用许多神经元去拟合数据分布,但是只用一层fully connected layer 有时候没法解决非线性问题,而如果有两层或以上fully connected layer就可以很好地解决非线性问题了.

    全连接层之前的作用是提取特征,全连接层的作用是分类

    假设这个神经网络模型已经训练完了

    全连接层已经知道

     

    当我们得到以上特征,我就可以判断这个东东是猫了,因为全连接层的作用主要就是实现分类(Classification),从下图,我们可以看出

    红色的神经元表示这个特征被找到了(激活了),同一层的其他神经元,要么猫的特征不明显,要么没找到,当我们把这些找到的特征组合在一起,发现最符合要求的是猫,ok,我认为这是猫了,那我们现在往前走一层,那们现在要对子特征分类,也就是对猫头,猫尾巴,猫腿等进行分类,比如我们现在要把猫头找出来

     

    猫头有这么些个特征,于是我们下一步的任务,就是把猫头的这么些子特征找到,比如眼睛啊,耳朵啊

     

    道理和区别猫一样,当我们找到这些特征,神经元就被激活了(上图红色圆圈),这细节特征又是怎么来的?,就是从前面的卷积层,下采样层来的


    全连接层到底什么用?我来谈三点。

    • 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽(注1)。
    • 目前由于全连接层参数冗余(仅全连接层参数就可占整个网络参数80%左右),近期一些性能优异的网络模型如ResNet和GoogLeNet等均用全局平均池化(global average pooling,GAP)取代FC来融合学到的深度特征,最后仍用softmax等损失函数作为网络目标函数来指导学习过程。需要指出的是,用GAP替代FC的网络通常有较好的预测性能。具体案例可参见我们在ECCV'16(视频)表象性格分析竞赛中获得冠军的做法:「冠军之道」Apparent Personality Analysis竞赛经验分享 - 知乎专栏 ,project:Deep Bimodal Regression for Apparent Personality Analysis
    • 在FC越来越不被看好的当下,我们近期的研究(In Defense of Fully Connected Layers in Visual Representation Transfer)发现,FC可在模型表示能力迁移过程中充当“防火墙”的作用。具体来讲,假设在ImageNet上预训练得到的模型为 ,则ImageNet可视为源域(迁移学习中的source domain)。微调(fine tuning)是深度学习领域最常用的迁移学习技术。针对微调,若目标域(target domain)中的图像与源域中图像差异巨大(如相比ImageNet,目标域图像不是物体为中心的图像,而是风景照,见下图),不含FC的网络微调后的结果要差于含FC的网络。因此FC可视作模型表示能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC可保持较大的模型capacity从而保证模型表示能力的迁移。(冗余的参数并不一无是处。)

    注1: 有关卷积操作“实现”全连接层,有必要多啰嗦几句。
    以VGG-16为例,对224x224x3的输入,最后一层卷积可得输出为7x7x512,如后层是一层含4096个神经元的FC,则可用卷积核为7x7x512x4096的全局卷积来实现这一全连接运算过程,其中该卷积核参数如下:
    “filter size = 7, padding = 0, stride = 1, D_in = 512, D_out = 4096”
    经过此卷积操作后可得输出为1x1x4096。
    如需再次叠加一个2048的FC,则可设定参数为“filter size = 1, padding = 0, stride = 1, D_in = 4096, D_out = 2048”的卷积层操作。

     

    展开全文
  • 1. 池化在卷积网络中, 通常会在卷积层之间增加池化(Pooling) , 以降低特征图的参数量, 提升计算速度, 增加感受野, 是一种降采样操作。池化是一种较强的先验, 可以使模型更关注全局特征而非局部出现的位置...

    1. 池化层

    在卷积网络中, 通常会在卷积层之间增加池化(Pooling) 层, 以降低特征图的参数量, 提升计算速度, 增加感受野, 是一种降采样操作。池化是一种较强的先验, 可以使模型更关注全局特征而非局部出现的位置, 这种降维的过程可以保留一些重要的特征信息, 提升容错能力, 并且还能在一定程度上起到防止过拟合的作用。

    在物体检测中, 常用的池化有最大值池化(Max Pooling) 与平均值池化(Average Pooling) 。 池化层有两个主要的输入参数, 即核尺寸kernel_size与步长stride。 如图3.7所示为一个核尺寸与步长都为2的最大值池化过程, 以左上角为例, 9、 20、 15与26进行最大值池化, 保留26。

    下面是PyTorch对于池化层的实现。

    1 importtorch2 from torch importnn3

    4 max_pooling = nn.MaxPool2d(2, stride=2)5 aver_pooling = nn.AvgPool2d(2, stride=2)6

    7 input = torch.randn(1, 1, 4, 4)8 print(input)9 >> tensor([[[[ 1.2237, -0.8173, -0.2594, 0.1698],10 [-0.1023, 0.6973, -0.6429, 0.8561],11 [-0.3660, 0.1269, 0.2488, 0.0576],12 [ 0.0859, 0.1622, -0.0725, -0.0237]]]])13

    14 #池化主要需要两个参数, 第一个参数代表池化区域大小, 第二个参数表示步长

    15 out_max =max_pooling(input)16 print(out_max)17 >> tensor([[[[1.2237, 0.8561],18 [0.1622, 0.2488]]]])19

    20 #调用最大值池化与平均值池化, 可以看到size从[1, 1, 4, 4]变为了[1, 1, 2, 2]

    21 out_aver =aver_pooling(input)22 print(out_aver)23 >> tensor([[[[0.2503, 0.0309],24 [0.0023, 0.0525]]]])

    View Code

    2. Dropout层    在深度学习中, 当参数过多而训练样本又比较少时, 模型容易产生过拟合现象。 过拟合是很多深度学习乃至机器学算法的通病, 具体表现为在训练集上预测准确率高, 而在测试集上准确率大幅下降。 2012年, Hinton等人提出了Dropout算法, 可以比较有效地缓解过拟合现象的发生, 起到一定正则化的效果。Dropout的基本思想如图3.8所示, 在训练时, 每个神经元以概率p保留, 即以1-p的概率停止工作, 每次前向传播保留下来的神经元都不同, 这样可以使得模型不太依赖于某些局部特征, 泛化性能更强。 在测试时, 为了保证相同的输出期望值, 每个参数还要乘以p。 当然还有另外一种计算方式称为Inverted Dropout, 即在训练时将保留下的神经元乘以1/p, 这样测试时就不需要再改变权重。

    至于Dropout为什么可以防止过拟合, 可以从以下3个方面解释。

    ·多模型的平均: 不同的固定神经网络会有不同的过拟合, 多个取平均则有可能让一些相反的拟合抵消掉, 而Dropout每次都是不同的神经元失活, 可以看做是多个模型的平均, 类似于多数投票取胜的策略。

    ·减少神经元间的依赖: 由于两个神经元不一定同时有效, 因此减少了特征之间的依赖, 迫使网络学习有更为鲁棒的特征, 因为神经网络不应该对特定的特征敏感, 而应该从众多特征中学习更为共同的规律,这也起到了正则化的效果。

    ·生物进化: Dropout类似于性别在生物进化中的角色, 物种为了适应环境变化, 在繁衍时取雄性和雌性的各一半基因进行组合, 这样可以适应更复杂的新环境, 避免了单一基因的过拟合, 当环境发生变化时也不至于灭绝。

    在PyTorch中使用Dropout非常简单, 示例如下:

    importtorchfrom torch importnn#PyTorch将元素置0来实现Dropout层, 第一个参数为置0概率, 第二个为是否原地操作

    dropout = nn.Dropout(0.5, inplace=False)

    input= torch.randn(2, 64, 7, 7)

    output=dropout(input)print(output.shape)

    View Code

    Dropout被广泛应用到全连接层中, 一般保留概率设置为0.5, 而在较为稀疏的卷积网络中则一般使用下一节将要介绍的BN层来正则化模型, 使得训练更稳定。

    3. BN层

    为了追求更高的性能, 卷积网络被设计得越来越深, 然而网络却变得难以训练收敛与调参。 原因在于, 浅层参数的微弱变化经过多层线性变换与激活函数后会被放大, 改变了每一层的输入分布, 造成深层的网络需要不断调整以适应这些分布变化, 最终导致模型难以训练收敛。

    由于网络中参数变化导致的内部节点数据分布发生变化的现象被称做ICS(Internal Covariate Shift) 。 ICS现象容易使训练过程陷入饱和区, 减慢网络的收敛。 前面提到的ReLU从激活函数的角度出发, 在一定程度上解决了梯度饱和的现象, 而2015年提出的BN层, 则从改变数据分布的角度避免了参数陷入饱

    和区。 由于BN层优越的性能, 其已经是当前卷积网络中的“标配”。

    BN层首先对每一个batch的输入特征进行白化操作, 即去均值方差过程。 假设一个batch的输入数据为x: B={ x1,…,xm} , 首先求该batch数据的均值与方差, 如式(3-5) 和式(3-6) 所示。

    以上公式中, m代表batch的大小, μB为批处理数据的均值, σ2B为批处理数据的方差。 在求得均值方差后, 利用式(3-7) 进行去均值方差操作:

    白化操作可以使输入的特征分布具有相同的均值与方差, 固定了每一层的输入分布, 从而加速网络的收敛。 然而, 白化操作虽然从一定程度上避免了梯度饱和, 但也限制了网络中数据的表达能力, 浅层学到的参数信息会被白化操作屏蔽掉, 因此, BN层在白化操作后又增加了一个线性变换操作, 让数据尽可能地恢复本身的表达能力, 如公式(3-7) 和公式(3-8) 所示。

    公式(3-8) 中, γ与β为新引进的可学习参数, 最终的输出为yi。

    BN层可以看做是增加了线性变换的白化操作, 在实际工程中被证明了能够缓解神经网络难以训练的问题。 BN层的优点主要有以下3点:

    ·缓解梯度消失, 加速网络收敛。 BN层可以让激活函数的输入数据落在非饱和区, 缓解了梯度消失问题。 此外, 由于每一层数据的均值与方差都在一定范围内, 深层网络不必去不断适应浅层网络输入的变化,实现了层间解耦, 允许每一层独立学习, 也加快了网络的收敛。·简化调参, 网络更稳定。 在调参时, 学习率调得过大容易出现震荡与不收敛, BN层则抑制了参数微小变化随网络加深而被放大的问题, 因此对于参数变化的适应能力更强, 更容易调参。

    ·防止过拟合。 BN层将每一个batch的均值与方差引入到网络中, 由于每个batch的这两个值都不相同, 可看做为训练过程增加了随机噪音,可以起到一定的正则效果, 防止过拟合。在测试时, 由于是对单个样本进行测试, 没有batch的均值与方差,通常做法是在训练时将每一个batch的均值与方差都保留下来, 在测试时使用所有训练样本均值与方差的平均值。    PyTorch中使用BN层很简单, 示例如下:

    1 importtorch2 from torch importnn3 #使用BN层需要传入一个参数为num_features, 即特征的通道数

    4 bn = nn.BatchNorm2d(64)5 print(bn)6 >> BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7

    8 #eps为公式中的є, momentum为均值方差的动量, affine为添加可学习参数

    9 input = torch.randn(4, 64, 224, 224)10 output =bn(input)11 #BN层不改变输入、 输出的特征大小

    12 print(output.shape)13 >> torch.Size([4, 64, 224, 224])

    View Code

    尽管BN层取得了巨大的成功, 但仍有一定的弊端, 主要体现在以下两点:

    ·由于是在batch的维度进行归一化, BN层要求较大的batch才能有效地工作, 而物体检测等任务由于占用内存较高, 限制了batch的大小, 这会限制BN层有效地发挥归一化功能。

    ·数据的batch大小在训练与测试时往往不一样。 在训练时一般采用滑动来计算平均值与方差, 在测试时直接拿训练集的平均值与方差来使用。 这种方式会导致测试集依赖于训练集, 然而有时训练集与测试集的数据分布并不一致。

    因此, 我们能不能避开batch来进行归一化呢? 答案是可以的, 最新的工作GN(Group Normalization) 从通道方向计算均值与方差, 使用更为灵活有效, 避开了batch大小对归一化的影响。    具体来讲, GN先将特征图的通道分为很多个组, 对每一个组内的参数做归一化, 而不是batch。 GN之所以能够工作的原因, 笔者认为是在特征图中, 不同的通道代表了不同的意义, 例如形状、 边缘和纹理等, 这些不同的通道并不是完全独立地分布, 而是可以放到一起进行归一化分析。

    4. 全连接层全连接层(Fully Connected Layers) 一般连接到卷积网络输出的特征图后边, 特点是每一个节点都与上下层的所有节点相连, 输入与输出都被延展成一维向量, 因此从参数量来看全连接层的参数量是最多的,如图3.9所示。

    在物体检测算法中, 卷积网络的主要作用是从局部到整体地提取图像的特征, 而全连接层则用来将卷积抽象出的特征图进一步映射到特定维度的标签空间, 以求取损失或者输出预测结果。

    在第2章中的感知机例子即是使用了三层的全连接网络进行分类,PyTorch使用全连接层需要指定输入的与输出的维度。

    示例如下:

    importtorchfrom torch importnn#第一维表示一共有4个样本

    input = torch.randn(4, 1024)

    linear= nn.Linear(1024, 4096)

    output=linear(input)print(input.shape)>> torch.Size([4, 1024])print(output.shape)>> torch.Size([4, 4096])

    View Code

    然而, 随着深度学习算法的发展, 全连接层的缺点也逐渐暴露了出来, 最致命的问题在于其参数量的庞大。 在此以VGGNet为例说明, 其第一个全连接层的输入特征为7×7×512=25088个节点, 输出特征是大小为4096的一维向量, 由于输出层的每一个点都来自于上一层所有点的权重相加, 因此这一层的参数量为25088×4096≈108。 相比之下, VGGNet最后一个卷积层的卷积核大小为3×3×512×512≈2.4×106, 全连接层的参数量是这一个卷积层的40多倍。

    大量的参数会导致网络模型应用部署困难, 并且其中存在着大量的参数冗余, 也容易发生过拟合的现象。 在很多场景中, 我们可以使用全局平均池化层(Global Average Pooling, GAP) 来取代全连接层, 这种思想最早见于NIN(Network in Network) 网络中, 总体上, 使用GAP有如下3点好处:

    ·利用池化实现了降维, 极大地减少了网络的参数量。

    ·将特征提取与分类合二为一, 一定程度上可以防止过拟合。

    ·由于去除了全连接层, 可以实现任意图像尺度的输入。

    展开全文
  • 全连接层

    2021-02-24 11:53:03
    1、将前一层输出的二维特征图综合起来转化一维向量,它的每一节点都与上一层...3全连接层实现过程:对前层是全连接的全连接层可以转换卷积核1*1的卷积;而前层是卷积层的全连接层可以转换卷积核前层卷积
  • 当我第一次看到这个全连接层,我的第一问题是:它是怎么样把3x3x5的输出,转换成1x4096的形式? 很简单,可以理解在中间做了一卷积。 从上图我们可以看出,我们 3×3×5 的 filter 去卷积
  • 全连接层与 GAP

    2021-08-01 20:22:36
    先把卷积层生成的图像降维成一维向量,然后全连接层把一维向量转化成指定数的单元值。 如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”...
  • 今天发现一有意思的地方 输入shape:torch.Size([1, 8, 64]) 全连接层: nn.Linear(64, 1) 居然没有报错,而且输出torch.Size([1, 8, 1])!nb
  • 全连接层可以看成拿4096卷积核,卷积核的大小335 去和原始数据卷积 生成 每卷积核和输入图像进行这样的卷积(蓝色部分去掉)生成一数 最后生成1*4096数 (曾经的思维误区: 认为卷积核必须是nn的二维图像...
  • 使用pytorch写网络结构的时候,本人发现在卷积层与第一个全连接层全连接层的input_features不知道该写多少?一开始本人的做法是对着pytorch官网的公式推,但是总是算错。后来发现,写完卷积层后可以根据模拟神经...
  • 1.怎样将全连接层转换卷积层? 首先,我们需要了解全连接层和卷积层之间有啥区别。 卷积层与全连接层 卷积层的特点:稀疏连接,权值共享 全连接层的特点:每神经元都和上一层的所有神经元相连接 两者的共同...
  • dropout要解决的问题:在机器学习的一些模型中,如果模型的参数太多,而训练样本又太少的话,这样训练出来的模型很容易产生过拟合现象。内容:在训练时, 每神经元以概率p保留, 即以1-p的概率停止工作, 每次前...
  • 【计算机视觉】——全局平均池化代替全连接层全连接层的作用? 一、参考链接如下: 全连接层的作用是什么? 为什么使用全局平均池化层? 二、需要解决的问题如下: 1.全连接层的作用是什么? 全连接层的作用主要...
  • 全连接层结构理解

    2021-04-28 14:52:46
    以上图例,我们仔细看上图全连接层的结构,全连接层中的每一层是由许多神经元组成的(1x 4096)的平铺结构。它是怎么样把3x3x5的输出,转换成1x4096的形式??? 从上图我们可以看出,我们个33✖5的filter...
  • pytorch写cnn的麻烦之处是cnn到第一个全连接层的参数不明确。可以手动计算,但太麻烦,不建议这做。下面通过代码自己计算出来参数数。 问题:下面的的第一个全连接层的输入神经元数是多少呢? ...
  • 官方文档:...相当于一特征提取器(特征增强,消除噪声)2.提供...
  • 一、全连接层tensorflow中用tf.keras.layers.Dense()这类作为全连接的隐藏层,下面是参数介绍:tf.keras.layers.Dense()inputs = 64, # 输入该网络层的数据units = 10, # 输出的维度大小activation = None, # 选择...
  • 全连接层调参tricks

    2021-05-13 16:55:00
    我们做深度学习时往往要结合多种神经网络来构建模型,这种模型构建方式称之混合神经网络模型,不管是CNN、RNN、BERT、RoBERTa还是混合神经网络模型,最后的最后一定要接一个全连接层来学习提取到的特征。...
  • 卷积神经网络类主体层的理解(重点在全连接层三个部分每部分的作用1.卷积层2.池化层(下采样池化层)3.全连接层(fully connected)(用于分类任务,在分割和检测上不适用)参考: 三个部分 ①卷积层(conv)...
  • 06_2_神经网络与全连接层_全连接层&输出方式&误差计算 全连接层 deep learning最基本的层:全连接层,也就是线性层 Outline Matmul 矩阵形式 ->迭代到 Neural Network 神经网络结构 ->引入 Deep ...
  • 首先说明:可以不用全连接层的。理解1:卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。因为用到了所有的局部特征,所以叫全连接。理解2:从卷积网络谈起,卷积网络在形式上有一...
  • stride:步长(应该与池化核尺寸相同,防止重叠所以也元组) padding:填充数 dilation:池化核间隔大小 ceil_mode:尺寸像上(True)/(false默认)下取整 return_indices:记录池化像素索引 当把m
  • (1) 全连接层创建:tf.keras.Sequential(),tf.keras.layers.Dense() (2) 输出方式:tf.sigmoid(),tf.softmax(),tf.tanh() 1. 全连接层 全连接层在整个网络卷积神经网络中起到特征提取器的作用。全连接层将学到...
  • 卷积层和池化的理解 外加个人理解。仅作为本人笔记便于速览,如有侵权,联系立删。 正文: 人工神经网络中,单个神经元一般模型是这样的,从左到右分别是输入,输入权重,输入乘以输入权重求和,这里-1应该是偏置...
  • print('ok') 其中提取的特征outputs的维度是(1,512), (特征融合后)(上述代码未进行特征融合) 再进行全连接分类层,得到的final_outputs的维度是(1,5) 参考 去除resnet全连接层,感谢大佬博主文章——传送门

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 393,716
精华内容 157,486
关键字:

为什么全连接层用3个