一: 卷积神经网络(CNN: Convolutional Neural Network)
CNN是由一个或多个卷积层和顶端的全连通层组成,同时也包括关联权重和池化层等。下图就是一个经典的神经网络。
卷积层:卷积层是卷积神经网络的核心层,而卷积(Convoltuion)是卷积层的核心。卷积运算就是用卷积分别乘以输入张量中的每一个元素,然后输出一个代表每个输入信息的张量。其中卷积核(Kernel) 又被称为权重过滤器,简称为过滤器(Fliter)。
卷积计算公式:
- H:图片高度
- W: 图片宽度
- D:原始图片通道数,也是卷积核个数
- F: 卷积核高宽大小,一般取1*1,3*3,5*5,7*7等
- P:图像边填充大小或者零填充
- S:滑动步长
则经过本层卷积运算后的输出即下一层的输入为:
- H1 = ( H-F+2P ) / S +1
- W1= ( W-F+2P ) / S +1
- D1 = F
池化层:池化(Pooling)又称下采样(Subsampling)。池化层在CNN中可用来减少尺寸、提高运算速度及减少噪声影响,让葛特征更具有健壮性。通常在卷积层的后面会加上一个池化层。池化的方式通常有三种:最大池化(MaxPooling);均值池化(MeanPooling);随机/概率池化。下图为最大池化示例:
激活函数:(Activation Function)就是对神经网络中某一部分神经元的非线性运算,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。激活函数一般要求可微,且不改变输入数据的维度。常见的激活函数有:Sigmoid函数、tanh函数、relu函数、softplus函数、dropout函数等。
代价函数:代价函数是神经网络模型的效果评估及优化的目标函数,常用于监督学习中关于分类模型和回归模型中迭代优化。分类问题中常用交叉熵(cross_entropy)算法,回归问题常用误差评估(mean_squared_error)算法。
二 :CNN 之 LeNet-5 模型
CNN 模型有很多变种,LeNet-5 模型就是比较有代表性的模型。
LeNet-5 模型结构为输入层--卷积层--池化层--卷积层--池化层--全连接层--全连接层--输出层,为串联模型。如下图所示:
各层参数详解:
1. INPUT 输入层:
图像数据归一化为 32*32 尺寸
2. C1层-卷积层:
输入图片 | 32*32 | |
卷积核大小 | 5*5 | |
卷积核数量(种类) | 6 | |
输出FeatureMap | 28*28 | 计算公式:H1 = ( H-F+2P ) / S +1 |
神经元数量 | 28*28*6 | |
可训练参数 | (5*5+1)*6=156 | 每个卷积核5*5=25个参数和一个bias参数,一共6个卷积核 |
全连接数 | (5*5+1)*6*28*28=122304 |
3. S2层-池化层
输入 | 28*28 | |
采样大小 | 2*2 | |
采样方式 | 4个输入相加,乘以一个可训练参数,再加上一个可训练偏置,结果通再过sigmoid函数。 | |
采样种类 | 6 | |
输出FeatureMap | 14*14 | |
神经元数量 | 14*14*6 | |
全连接数 | (2*2+1)*14*14*6=5880 |
4. C3层-卷积层
输入 | S2中所有6个或者几个特征map组合 | |
卷积核大小 | 5*5 | |
卷积核数量(种类) | 16 | |
输出FeatureMap | 10*10 | H1 = ( H-F+2P ) / S +1 |
神经元数量 | 10*10*16 | |
可训练参数 | 6*(3*5*5+1) +6*(4*5*5+1) +3*(4*5*5+1) +1*(6*5*5+1)=1516 | C3的前6个特征图以S2中3个相邻的特征图子集为输入;接下来6个特征图以S2中4个相邻特征图子集为输入;然后的3个以不相邻的4个特征图子集为输入;最后一个将S2中所有特征图为输入 |
全连接数 | 10*10*1516=151600 |
5. S4层-池化层
输入 | 10*10 | |
采样大小 | 2*2 | |
采样方式 | 4个输入相加,乘以一个可训练参数,再加上一个可训练偏置,结果通再过sigmoid函数。 | |
采样种类 | 16 | |
输出FeatureMap | 5*5 | |
神经元数量 | 5*5*16=400 | |
全连接数 | (2*2+1)*5*5*16=2000 |
6. C5层-卷积层
输入 | S4层的全部16个FeatureMap(与s4全相连) | |
卷积核大小 | 5*5 | |
卷积核数量(种类) | 120 | |
输出FeatureMap | 1*1 | H1 = ( H-F+2P ) / S +1 |
神经元数量 | 1*1*120 | |
可训练参数 | (5*5*16+1)*120=48120 | |
全连接数 | (5*5*16+1)*120=48120 |
7.F6层-全连接层
输入 | C5层输出的 1*1*120 向量 | |
计算方式 | 计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。 | |
可训练参数 | (1*1*120+1)*84=10164 | F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码 |
8. OUTPUT层-全连接层
Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向欧式距离函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
该层有84x10=840个参数和连接。
LeNet-5 神经网络总结:
LeNet5 这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,全连接层,是其他深度学习模型的基础。
三 :参考链接
https://cuijiahua.com/blog/2018/01/dl_3.html
https://blog.csdn.net/XJY104165/article/details/78218057