第四节:池化层激活层和全连接层
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四节:池化层激活层和全连接层相关的知识,希望对你有一定的参考价值。
文章目录
一:池化层
池化层:池化层一般会跟在卷积层进行,主要目的是为了减少特征尺寸,也即池化层不是说一定要加,只是说当你有减少特征尺寸的需求时,可以加入池化层
(1)上采样和下采样
在图像处理中,上采样和下采样是两个非常重要的概念
- 上采样(upsampling):其主要目的是对图像进行差值,放大原图像,使图像变得更加细腻
- 下采样(subsampled):其主要目的是减小尺寸、减少计算量
(2)池化层作用
池化层又叫做下采样层,通常会跟在卷积层之后,引入它的目的主要是为了简化卷积层的输出。可以这样理解,池化层在卷积层上架起了一个窗口,但是这个窗口相比卷积层来说简单许多,不需要如 w w w、 b b b这样的参数,它只是对窗口范围内的神经元做一些简单操作,例如求和、求最大值等等
因此池化层可以对感受野内的特征进行筛选,提取区域内代表性的特征,同时又能够有效减小输出特征尺度,进而减少模型所需要的参数量
特别注意,池化操作只会改变H 和 W,并会改变C
池化按操作类型可以分为如下几种
- 最大池化(max pooling):在CV中使用的最多,提取感受野内最大特征值
- 平均池化(average pooling):提取感受野内平均特征值
- 求和池化(sum pooling):提取感受野内总和特征值
- 自适应池化(adaptive pooling)
(3)torch.nn.Maxpool2d
torch.nn.Maxpool2d(
kernel_size, # 最大池化窗口
stride, # 步长
padding, # 填充
dilation, # 控制窗口中元素步幅
return_indics, # 布尔类型,返回最大值位置索引
ceil_mode, # 默认为False,表示向下取整
)
例如
Pooling_layer = torch.nn.MaxPool2d(kernel_size=2, stride=2)
out = Pooling_layer(out)
print("bach_size:, channels:, height:, width:".format(out.shape[0], out.shape[1], out.shape[2], out.shape[3]))
二:激活层
激活层: 和之前所说过的线性神经网络一样,卷积本质也是一种线性运算,如果只用卷积层,那么无非就是 n n n多个矩阵相乘罢了,将无法解决非线性问题,所以我们会加入激活函数**,以提高模型的非线性表达能力**
一般来说,每个卷积层后面都会跟上一个激活层,有关激活函数这里就不再细谈了,前面已有详细介绍最长用的激活函数便是ReLU(整流线性单元)
三:全连接层
在卷积神经网络的最后往往会有一个或多个全连接层,目的就是为了根据提取出的特征进行最后的分类。例如对于一个二分类问题,最后的输出结果会是一个2×1的向量,向量中的每个值对应各个类别的得分,然后将 此输出值送给分类器(例如softmax分类器)
假设得到了三张特征图,那么在进入全连接层时需要把这4×4×3的矩阵展开成一个48×1的向量
此时这48×1向量中的每一个元素就是输入层的一个神经元,然后根据我们计算得到的权重矩阵,对其进行加权求和,就得到了每个分类的得分
然后剩余部分和我们之前所学的就一样了,根据softmax函数进行概率计算
以上是关于第四节:池化层激活层和全连接层的主要内容,如果未能解决你的问题,请参考以下文章