全连接层与 GAP

全连接层

全连接层一般会放在网络的最后,作用是用来综合所有信息。先把卷积层生成的图像降维成一维向量,然后全连接层把一维向量转化成指定个数的单元值
在这里插入图片描述
如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。

在实际使用中,全连接层可由卷积操作实现:

对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;
前层是卷积层的全连接层可以转化为卷积核为 h * w 的全局卷积,h和w分别为前层卷积结果的高和宽。

(1)展平操作

卷积层之后是无法直接连接全连接层的,需要把卷积层产生的 feature map 进行压平(Flatten),也就是把 (height,width,channel)的数据压缩成长度为 height × width × channel 的一维数组,然后就可以直接进入全连接层了
在这里插入图片描述
可以从图中看到,随着网络的深入,我们的图像(严格来说中间的那些不能叫图像了,但是为了方便,还是这样说吧)越来越小,但是channels却越来越大了。在图中的表示就是长方体面对我们的面积越来越小,但是长度却越来越长了。

展平操作的 Pytorch 实现:

torch.flatten(input, start_dim=0, end_dim=-1)

input::一个 tensor,即要被“推平”的 tensor;
start_dim: “推平”的起始维度;
end_dim: “推平”的结束维度;
首先如果按照 start_dim 和 end_dim 的默认值,那么这个函数会把 input 推平成一个 shape 为 [n] 的tensor,其中 n 即 input 中元素个数。

(2)Pytorch 中全连接层的实现

linear 函数

class torch.nn.Linear(in_features: int, out_features: int, bias: bool = True)

Linear() 用矩阵乘法的形式实现对所有输入的加权求和,如下式,由于x出现在权值矩阵左方,如果输入的是一维数据(一个样本),它应该是一个行向量,此时输入尺寸就等于向量长度。
在这里插入图片描述

PyTorch的 nn.Linear() 是用于设置网络中的全连接层的,需要注意在二维图像处理的任务中,全连接层的输入与输出一般都设置为二维张量,形状通常为 [batch_size, size],不同于卷积层要求输入输出是四维张量。
in_features 指的是输入的二维张量的大小,即输入的 [batch_size, size] 中的 size;out_features 指的是输出的二维张量的大小,即输出的二维张量的形状为 [batch_size,output_size],当然,它也代表了该全连接层的神经元个数。

从输入输出的张量的shape角度来理解,相当于把一个输入为 [batch_size, in_features] 的张量变换成了 [batch_size, out_features] 的输出张量
在这里插入图片描述

(3)全连接层的 dropout

dropout 是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。
dropout 是 CNN 中防止过拟合提高效果的一个大杀器。

class torch.nn.Dropout(p=0.5, inplace=False)

以 p 概率随机将全连接层的部分神经元失活。对于每次前向传播,失活的神经元都是随机的。

二、全局平均池化(GAP)

全连接存在的问题:参数量过大,降低了训练的速度,且很容易过拟合。
全连接层将卷积层生成的 feature map 展平成一维向量之后再进行分类,而 GAP 的思路就是将上述两个过程合二为一,如图所示:
在这里插入图片描述

其实也就是通过池化层将原有的输入为 [b,c,h,w] 减少成 [b,c,1,1] 的尺寸,也即将 [w,h] 的 feature map 进行平均池化变为一个单元(池化层的过滤器大小为w * h)

这两者合二为一的过程我们可以探索到 GAP 的真正意义是:对整个网路在结构上做正则化防止过拟合。其直接剔除了全连接层中黑箱的特征,直接赋予了每个 channel 实际的内别意义。

(1)全连接层与 GAP 的对比

计算量的对比

全连接先把特征图压缩成1列,然后接两层全连接故计算量 k * k * k * k

GAP只在gap得到的特征后直接softmax,故计算量 k * k

输入大小、感受野、参数量、特征信息对比

GAP 去除了对输入大小的限制。
● 全局平均池化操作,从而使其具有全局的感受野,使得网络低层也能利用全局信息
● 全连接的目的,因为传统的网络我们的输出都是几个类别的概率,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。但是全连接的参数实在是太多了;GAP减少了参数的数量,可以减轻过拟合的发生
FC会导致 feature map 损失空间位置信息,而GAP则不会
(如果在图像的某一位置有高响应,则经过FC之后,根据整个feature并不能分辨出刺激源于左上角还是右下角还是什么其他的地方,而通过GAP就可以,因为其保留了空间位置信息)

(2)GAP 的 Pytorch 实现

class torch.nn.AdaptiveAvgPool2d(output_size)

output_size:输出信号的尺寸,可以用(H,W)表示H*W的输出,也可以使用耽搁数字 H 表示 H * H 大小的输出。

(3)GAP 后进行分类

GAP 层不能不能改变输出单元个数,因此后面再接一个 FC 进行分类:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值