CNN基础——卷积神经网络的组成

网友投稿 917 2022-05-30

以图像分类任务为例,在下表所示卷积神经网络中,一般包含5种类型的网络层次结构:

W1×H1×3

W1×H1×3对应原始图像或经过预处理的像素值矩阵,3对应RGB图像的通道;K表示卷积层中卷积核(滤波器)的个数;W2× H2 为池化后特征图的尺度,在全局池化中尺度对应1×1;(W2H2K)是将多维特征压缩到1维之后的大小,C对应的则是图像类别个数。

1 输入层

输入层(Input Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅利叶变换的二维波形数据,甚至是自然语言处理中一维表示的句子向量。以图像分类任务为例,输入层输入的图像一般包含RGB三个通道,是一个由长宽分别为H和W组成的3维像素值矩阵H× W ×3,卷积网络会将输入层的数据传递到一系列卷积、池化等操作进行特征提取和转化,最终由全连接层对特征进行汇总和结果输出。根据计算能力、存储大小和模型结构的不同,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为N,则输入层的输出数据为N×H×W×3。

2 卷积层

卷积层(Convolution Layer)通常用作对输入层输入数据进行特征提取,通过卷积核矩阵对原始数据中隐含关联性的一种抽象。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征。下图表示卷积操作过程中的不同填充策略,上半部分采用零填充,下半部分采用有效卷积(舍弃不能完整运算的边缘部分)。

卷积神将网络的计算公式为:

N=(W-F+2P)/S+1

其中N:输出大小

W:输入大小

F:卷积核大小

P:填充值的大小

S:步长大小

举例:

nn.Conv2d(in_channels=3,out_channels=96,kernel_size=12,stride=4,padding=2)

in_channels=3:表示的是输入的通道数,由于是RGB型的,所以通道数是3.

out_channels=96:表示的是输出的通道数,设定输出通道数的96(这个是可以根据自己的需要来设置的)

kernel_size=12:表示卷积核的大小是12x12的,也就是上面的 “F”, F=12

stride=4:表示的是步长为4,也就是上面的S, S=4

padding=2:表示的是填充值的大小为2,也就是上面的P, P=2

假如你的图像的输入size是256x256的,由计算公式知N=(256-12+2x2)/4+1=63,也就是输出size为63x63x96

卷积层的参数计算:

卷积后feature map边长: outputSize =(originalSize + paddingX2 - kernelSize)/ stride + 1 (其中outputSize是卷积之后得到的feature map的边长,originalSize是输入图的边长,padding是填充的大小,kernelSize是卷积核的边长,stride是步长)

卷积层的可训练的参数个数: trainNum = (outputSize X outputSize + 1) X kernelNum (其中kernelNum是卷积核的个数,加1是因为每一个卷积核有一个bias参数)

卷积层的连接数: connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum

卷积层的神经元个数: neuralNum = (outputSzie X outputSize) X kernelNum

3 激活层

激活层(Activation Layer)负责对卷积层抽取的特征进行激活,由于卷积操作是由输入矩阵与卷积核矩阵进行相差的线性变化关系,需要激活层对其进行非线性的映射。激活层主要由激活函数组成,即在卷积层输出结果的基础上嵌套一个非线性函数,让输出的特征图具有非线性关系。卷积网络中通常采用ReLU来充当激活函数(还包括tanh和sigmoid等)ReLU的函数形式如下公式所示,能够限制小于0的值为0,同时大于等于0的值保持不变。

4 池化层

池化层又称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受域内最大、平均与总和的特征值作为输出,最常用的是最大池化。

池化操作没有用于训练的参数,只有两个超参数Stride和kernel_size,过程与卷积操作类似,也是在输入图像上从左到右从上到下滑动,在滑动过程中,当核覆盖在一个区域的时候,用这个区域的最大值作为结果,Stride和kernel_size一般来说相等。

下采样层的参数计算:

下采样后map的边长: outputSize =(originalSize + paddingX2 - kernelSize)/ stride + 1 (其中outputSize是卷积之后得到的feature map的边长,originalSize是输入图的边长,padding是填充的大小,kernelSize是卷积核的边长,stride是步长)

下采样层可训练的参数个数: trainNum = (1+ 1) X kernelNum (其中kernelNum是卷积核的个数)

下采样层的连接数: connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum

下采样层的神经元个数: neuralNum = (outputSzie X outputSize) X kernelNum

CNN基础——卷积神经网络的组成

5 全连接层

全连接层(Full Connected Layer)负责对卷积神经网络学习提取到的特征进行汇总,将多维的特征输入映射为二维的特征输出,高维表示样本批次,低位常常对应任务目标。

卷积神经网络 神经网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java笔记之final和static关键字
下一篇:【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )
相关文章